我需要检查一个项目列表是否包含一个字符串......所以有点像列表在用户在搜索框中键入时被过滤。因此,在文本更改事件中,我正在检查输入的文本是否包含在 listox 项目之一中并过滤掉......所以类似于:
value.Contains(enteredText)
我想知道这是否是过滤掉列表框项目的最快和最有效的方法?
方法是Contains()
在 C# 中搜索子字符串的最佳方法吗?
我想说的是,在除了非常特殊的情况下,它足够快速和高效,即使在这种特殊情况下,它也可能是一个纯粹的学术问题。如果您使用它并遇到与此相关的逻辑中的任何瓶颈,那么我会感到惊讶,但只有这样它才值得一看,那么您很可能会在其他地方寻找。
尽管这不是全球最快的选项,但它是最快的选项,您无需编写任何代码。它应该足以过滤下拉项目。
对于较长的文本,您可能希望使用具有线性时序复杂度的KMP 算法。但是请注意,对于非常短的搜索字符串,它不会产生任何影响。
对于有很多匹配项的搜索(例如,您获得的第一个到两个字符的匹配项),您可能需要预先计算一个表格,将单个字母和字母对映射到下拉列表中的行,以便更快地查看 -以使用更多内存为代价(一般编程中一个相当标准的权衡)。