当前位置:  开发笔记 > 编程语言 > 正文

检查字符串是否包含列表中的元素(字符串)

如何解决《检查字符串是否包含列表中的元素(字符串)》经验,为你挑选了3个好方法。

对于以下代码块:

For I = 0 To listOfStrings.Count - 1
    If myString.Contains(lstOfStrings.Item(I)) Then
        Return True
    End If
Next
Return False

输出是:

情况1:

myString: C:\Files\myfile.doc
listOfString: C:\Files\, C:\Files2\
Result: True

案例2:

myString: C:\Files3\myfile.doc
listOfString: C:\Files\, C:\Files2\
Result: False

列表(listOfStrings)可能包含多个项目(最少20个),并且必须根据数千个字符串(如myString)进行检查.

是否有更好(更有效)的方法来编写此代码?



1> Marc Gravell..:

使用LINQ,并使用C#(这些天我不太了解VB):

bool b = listOfStrings.Any(s=>myString.Contains(s));

或(更短,更有效,但可以说不太清楚):

bool b = listOfStrings.Any(myString.Contains);

如果您正在测试相等性,那么值得查看HashSet等等,但这对部分匹配没有帮助,除非您将其拆分为片段并添加复杂性顺序.


更新:如果你的意思是"StartsWith",那么你可以对列表进行排序并将其放入数组中; 然后Array.BinarySearch用来查找每个项目 - 通过查找检查它是完全匹配还是部分匹配.



2> 小智..:

当你构造你的字符串时,它应该是这样的

bool inact = new string[] { "SUSPENDARE", "DIZOLVARE" }.Any(s=>stare.Contains(s));



3> Zach Scriven..:

从早先的类似问题" 针对大量可比数据的现有字符串测试的最佳方法 "中提出了许多建议.

正则表达式可能足以满足您的要求.表达式将是所有候​​选子串的串联,|它们之间带有OR" "运算符.当然,在构建表达式时,您必须注意未转义的字符,或者由于复杂性或大小限制而无法编译它.

另一种方法是构造一个trie数据结构来表示所有候选子串(这可能与正则表达式匹配器正在做的有些重复).当您单步执行测试字符串中的每个字符时,您将创建一个指向trie根的新指针,并将现有指针推进到相应的子节点(如果有).当任何指针到达叶子时,你得到一个匹配.

推荐阅读
小白也坚强_177
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有