一尘不染

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

c#

对于以下代码块:

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

有没有更好(更有效)的方式来编写此代码?


阅读 665

收藏
2020-05-19

共1个答案

一尘不染

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

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

或(更简短,更有效,但可以说不够清晰):

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

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


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

2020-05-19