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

标签 c# vb.net list coding-style performance

对于下面的代码块:

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)进行检查。

是否有更好(更高效)的方式来编写这段代码?

最佳答案

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

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

或(更短、更高效,但可能不太清楚):

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

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


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

关于c# - 检查字符串是否包含列表(字符串)中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/500925/

相关文章:

c# - 在 Visual Studio 2010 Ultimate 中自动化测试(使用 TFS)

mysql - 我该如何解决这个异常?

python - 如何在Python中覆盖列表获取对象

python - Pandas:如何将列中的多个列表拆分为多行?

c# - 从 .Net 4.6.1 单元测试引用 .Net 标准项目时缺少方法异常

c# - 在 C# 中将字节数组转换为包含字节数组的类

c# - 将 Windows Phone 8 应用程序设置为文件扩展名的默认值

asp.net - 有没有办法以编程方式将 blob/富文本备忘录存储为 rtf,而不是数据库?

vb.net - 从另一个表单触发事件

C#序列化和反序列化json到txt文件