我试图在我写的程序中实现搜索功能。目前,我有一个我正在搜索的字符串列表。
我要做的是检查搜索结果中是否显示已输入搜索框的所有字词。但是,问题在于它们可以按任何顺序出现。例如,如果字符串是:
快速的棕色狐狸跳过懒狗
我打算输入:
狗狐狸棕色
它将返回正面匹配。
我的第一个想法是将.split
搜索框中的单词转换为数组。然后,遍历字符串列表,并检查字符串是否包含数组中的每个单词,否则,将其从列表中删除。迭代完所有字符串后,显示结果。
然而,我可以想象会有大量的开销,特别是因为我希望过滤能够实时完成,即。附加到文本框的TextChanged事件。
是否有更有效的方法进行此过滤?我只是想确保在开始编码之前没有更有效的方法。
答案 0 :(得分:1)
我在Linq Regex.Matches().Count
.Select().Sum()
给定提供的输入字符串:
快速的棕色狐狸跳过懒狗
计算该字符串中匹配的模式数量和模式数量(单词)。
给定字符串中包含的模式:(并假设分隔符为chr(32)
))
狗狐狸褐色
Imports System.Text.RegularExpressions
Dim words As Integer
Dim NumberOfMatches As Integer = GetMatchingWords(
"The quick brown fox jumps over the lazy dog",
"dog fox brown",
words)
Public Function GetMatchingWords(TextToSearch As String, WordsToMatch As String, ByRef words As Integer) As Integer
words = Regex.Matches(WordsToMatch, ChrW(32)).Count + 1
Return WordsToMatch.Split(ChrW(32)).Select(
Function(word) Regex.Matches(TextToSearch, word).Cast(Of Match)().Count()).Sum()
End Function
此函数返回:
words = 3
NumberOfMatches = 3<br>