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