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

时间:2018-02-20 20:24:25

标签: vb.net string-comparison

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

我要做的是检查搜索结果中是否显示已输入搜索框的所有字词。但是,问题在于它们可以按任何顺序出现。例如,如果字符串是:

  

快速的棕色狐狸跳过懒狗

我打算输入:

  狗狐狸棕色

它将返回正面匹配。

我的第一个想法是将.split搜索框中的单词转换为数组。然后,遍历字符串列表,并检查字符串是否包含数组中的每个单词,否则,将其从列表中删除。迭代完所有字符串后,显示结果。

然而,我可以想象会有大量的开销,特别是因为我希望过滤能够实时完成,即。附加到文本框的TextChanged事件。

是否有更有效的方法进行此过滤?我只是想确保在开始编码之前没有更有效的方法。

1 个答案:

答案 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>