c#中检查字符串是否是子字符串的最快方法

本文关键字:字符串 方法 是否是 检查 | 更新日期: 2023-09-27 18:05:24

我需要检查项目列表是否包含字符串…就像当用户在搜索框中输入时列表会被过滤。因此,在文本更改事件中,我检查输入的文本是否包含在一个listox项中并过滤掉比如:

value.Contains(enteredText)

我想知道这是否是过滤列表框项的最快和最有效的方法?

Contains()方法在c#中搜索子字符串的最佳方式?

c#中检查字符串是否是子字符串的最快方法

我想说,除了非常特殊的情况,它在所有情况下都足够快速和有效,即使在这种特殊情况下,它也可能是一个纯粹的学术问题。如果您使用它并遇到与此相关的逻辑瓶颈,那么我会感到惊讶,但只有这样它才值得一看,然后您可能会寻找其他地方。

Contains是我的代码完成过滤算法中最便宜的方法之一(第6部分#6,其中#7和脚注中描述的模糊逻辑匹配要昂贵得多),即使是快速输入的用户和下拉框中的数千项也不会有问题。

我非常怀疑这会给你带来麻烦。

虽然这不是全局最快的选项,但它是您不需要编写任何代码的最快选项。它应该足以过滤下拉项。

对于较长的文本,您可能希望使用KMP算法,它具有线性时序复杂性。但是请注意,对于非常短的搜索字符串,它不会有任何区别。

对于有很多匹配的搜索(例如,你得到的第一个到两个字符),你可能想要预先计算一个表,将单个字母和字母对映射到下拉列表中的行,以便以使用更多内存为代价更快地查找(通常编程中相当标准的权衡)。