Vb.net 将字符串与单词列表进行比较

Vb.net 将字符串与单词列表进行比较,vb.net,string-comparison,Vb.net,String Comparison,我试图在我正在编写的程序中实现一个搜索功能。目前,我有一个字符串列表,我正在搜索 我想做的是检查搜索框中输入的所有单词是否都出现在搜索结果中。然而,问题是它们可以以任何顺序出现。例如,如果字符串为: 敏捷的棕色狐狸跳过了懒狗 我要打字: 狗狐棕 它将返回一个积极的匹配 我的第一个想法是将搜索框中的单词拆分成一个数组。然后,遍历字符串列表,检查字符串是否包含数组中的每个单词,否则,将其从列表中删除。遍历所有字符串后,显示结果 但是,我可以想象会有很大的开销,特别是因为我希望过滤是实时完成的,即附加

我试图在我正在编写的程序中实现一个搜索功能。目前,我有一个字符串列表,我正在搜索

我想做的是检查搜索框中输入的所有单词是否都出现在搜索结果中。然而,问题是它们可以以任何顺序出现。例如,如果字符串为:

敏捷的棕色狐狸跳过了懒狗

我要打字:

狗狐棕

它将返回一个积极的匹配

我的第一个想法是将搜索框中的单词拆分成一个数组。然后,遍历字符串列表,检查字符串是否包含数组中的每个单词,否则,将其从列表中删除。遍历所有字符串后,显示结果

但是,我可以想象会有很大的开销,特别是因为我希望过滤是实时完成的,即附加到textbox的TextChanged事件


有没有一种更有效的过滤方法?在开始编写代码之前,我只是想确保没有更有效的方法来执行此操作。

我建议在Linq
中使用
Regex.Matches().Count
.Select().Sum()

给定提供的输入字符串:

敏捷的棕色狐狸跳过了懒狗

统计该字符串中匹配的模式数和模式数(字)。

给定字符串中包含的模式:(并假设分隔符字符为
chr(32)

狗狐棕

此函数返回:

words = 3
NumberOfMatches = 3<br>
words=3
NumberOfMatches=3

如果要拆分和迭代项目,则应在拆分和迭代之前对两个集合进行排序,然后可以应用更智能的算法,而不是检查每个项目……您好@Alisson。你的意思是拆分两个字符串,对结果数组进行排序,然后进行数组比较吗?这里的方法可能会派上用场。与列表不同,您不需要迭代整个
HashSet
,只需查看某个项目是否存在(从而节省了大量处理能力)。只需调用,框架将为您处理查找。@VisualIncent有趣的是,不知道hashset能够通过使用
Contains()
函数以这种方式完成查找。我以为只有在检查平等性的情况下它才会起作用。糟糕的是,我误读了这个问题。使用
哈希集
只有在您可以事先为每个字符串构建一个哈希集的情况下才有好处。否则,您最初的想法是最快的,@Aommaster。谢谢!我能够对此进行一个小的优化。函数中不需要
words=Regex.Matches(WordsToMatch,Chr(32)).Count+1
,因为搜索词是相同的。所以我把它搬走了。我不确定这是否会有显著的不同,但我想为什么不会。嗯,我在你看到的编辑中添加了这个计数。我不确定你是否想比较字数和匹配数。或者如果你在某个时候需要那个数字引用。如果不这样做,代码越少越好:)注意!非常感谢你!
words = 3
NumberOfMatches = 3<br>