我需要检查一组项目是否包含一个字符串……就像当用户在搜索框中输入时,列表会被过滤掉。因此,在文本更改事件上,我会检查输入的文本是否包含在列表框项之一中,并进行过滤……就像这样:
value.Contains(enteredText)
我想知道这是否是过滤列表框项目的最快和最有效的方法?
Contains()
方法是在C#中搜索子字符串的最佳方法吗?
我需要检查一组项目是否包含一个字符串……就像当用户在搜索框中输入时,列表会被过滤掉。因此,在文本更改事件上,我会检查输入的文本是否包含在列表框项之一中,并进行过滤……就像这样:
value.Contains(enteredText)
我想知道这是否是过滤列表框项目的最快和最有效的方法?
Contains()
方法是在C#中搜索子字符串的最佳方法吗?
我认为除非是非常特殊的情况,否则它足够快速和高效,即使在这种特殊情况下,这可能仅仅是一个纯理论上的问题。如果您使用它并遇到与此相关的逻辑瓶颈,那么我会感到惊讶,但仅在这种情况下才值得查看,那么您可能会寻找其他解决方法。
Contains
是我 代码自动补全过滤算法(第6部分#6,其中#7和脚注中描述的模糊逻辑匹配要显著昂贵得多)中最便宜的方法之一,即使是在快速打字用户和下拉菜单中有成千上万个项目的情况下,也不会出现问题。
我非常怀疑它会给你带来问题。
虽然这不是全球最快的选项,但对于不需要编写任何代码的最快选项。它应该足以过滤下拉列表项。
对于较长的文本,您可能需要选择 KMP算法,其具有线性时间复杂度。但请注意,对于非常短的搜索字符串,它不会有任何区别。
对于具有大量匹配项的搜索(例如您在前一两个字符中获得的搜索),您可能希望预计算一个表,将单个字母和字母对映射到您下拉列表中的行,以便更快地查找,代价是使用更多内存(这是一种通常的编程折衷解决方案)。