【发布时间】:2018-02-20 20:24:25
【问题描述】:
我正在尝试在我正在编写的程序中实现搜索功能。目前,我有一个正在搜索的字符串列表。
我想做的是检查在搜索框中输入的所有字是否出现在搜索结果中。然而,问题是它们可以以任何顺序出现。例如,如果字符串是:
敏捷的棕狐跳过懒狗
我要输入:
狗狐棕色
它会返回一个肯定的匹配。
我的第一个念头是把.split搜索框中的词组成一个数组。然后,遍历字符串列表,并检查字符串是否包含数组中的每个单词,否则,将其从列表中删除。遍历完所有字符串后,显示结果。
但是,我可以想象会有大量开销,特别是因为我希望实时完成过滤,即。附加到文本框的 TextChanged 事件。
有没有更有效的过滤方式?我只是想确保在开始编码之前没有更有效的方法来执行此操作。
【问题讨论】:
-
如果您要拆分和迭代项目,您应该在这样做之前订购两个集合,然后您可以应用更智能的算法而不是检查每个项目...
-
嗨@Alisson。您的意思是拆分两个字符串,对结果数组进行排序,然后进行数组比较?
-
HashSetclass 可以在这里派上用场。与列表不同,您不需要遍历整个HashSet来查看是否存在某个项目(从而为您节省大量处理能力)。只需致电HashSet.Contains(),框架就会为您处理查找问题。 -
@VisualVincent 很有趣,不知道哈希集可以使用
Contains()函数以这种方式做到这一点。我认为它仅在检查相等性时才有效。 -
我的错,我误读了这个问题。使用
HashSet只有在事先 为每个字符串构建一个时才会有利可图。否则你最初的想法是最快的,@Aommaster。