3

我需要检查一个项目列表是否包含一个字符串......所以有点像列表在用户在搜索框中键入时被过滤。因此,在文本更改事件中,我正在检查输入的文本是否包含在 listox 项目之一中并过滤掉......所以类似于:

value.Contains(enteredText)

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

方法是Contains()在 C# 中搜索子字符串的最佳方法吗?

4

3 回答 3

4

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

于 2013-03-22T15:14:52.433 回答
1

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

我非常怀疑它会给你带来问题。

于 2013-03-22T15:15:11.367 回答
1

尽管这不是全球最快的选项,但它是最快的选项,您无需编写任何代码。它应该足以过滤下拉项目。

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

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

于 2013-03-22T15:22:10.780 回答