检查字符串是否为子串C#的最快方法?

时间:2013-03-22 15:11:35

标签: c# wpf

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

value.Contains(enteredText)

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

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

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

Contains是我code completion filtering algorithm中最便宜的方法之一(第6部分#6,其中#7和脚注中描述的模糊逻辑匹配非常昂贵),{{3}即使是快速输入用户和下拉列表中的数千个项目。

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

答案 2 :(得分:1)

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

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

对于包含大量匹配项的搜索(例如,您从前一个到两个字符获得的匹配项),您可能需要预先计算一个表,该表将单个字母和字母对映射到下拉列表中的行使用更多内存代价更快的查找(一般来说,编程中非常标准的权衡)。