对于以下代码块:
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
案例二:
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等,但这对部分匹配没有帮助,除非您将其拆分为片段并添加复杂性顺序。
HashSet
更新:如果您的意思是“StartsWith”,那么您可以对列表进行排序并将其放入数组中;然后用于Array.BinarySearch查找每个项目 - 通过查找检查它是完全匹配还是部分匹配。
Array.BinarySearch