在C#2.0中,比较一个字符串与一个字符串数组的最快方式是什么?
在C#2.0中,比较一个字符串与一个字符串数组的最快方式是什么?
您需要什么类型的比较?您想知道给定字符串是否在数组中吗?
bool targetStringInArray = array.Contains(targetString);
你是否需要一个比较值的数组(包括正数、负数和零)?var comparisons = array.Select(x => targetString.CompareTo(x));
如果你要检查是否包含某个字符串(即第一个选项),并且你将使用多个字符串进行此操作,那么最好从数组构建一个HashSet<string>
:
var stringSet = new HashSet<string>(array);
if (stringSet.Contains(firstString)) ...
if (stringSet.Contains(secondString)) ...
if (stringSet.Contains(thirdString)) ...
if (stringSet.Contains(fourthString)) ...
你的意思是要查看字符串是否在数组中吗?我记不清数组是否支持.Contains()方法,如果不支持,可以创建一个List<string>,通过AddRange()将数组添加到列表中,然后调用list.Contains({要比较的字符串})。将返回一个布尔值,指示字符串是否在数组中。
Array.Sort(array);
int index = Array.BinarySearch(array, input);
// if (index < 0)
// does not exists, "items > ~index" are larger and "< ~index" are smaller
// otherwise, "items > index" are larger and "< index" are smaller.
bool exists = Array.IndexOf(array, input) >= 0;
List<string> list1 = new List<string>(){"1", "2"};
List<string> list2 = new List<string>(){"1", "2", "3"};
list2.Contains(list1) //will be True, but not vice versa.
话虽如此,如果你想要精确匹配而非部分匹配,你可以使用Except()函数,并检查余下的部分。
if(list2.Except(list1).Length == 0) //will return false.
//get date from a text file
List<string> ls = ReadFile();
foreach(string file in checklist)
{
//get file name
string filename = Path.GetFileName(file);
string TargetLocation = Path.Combine(TargetPath, filename);
//now compare single string to a list
//it give in true and false
if(ls.Contains(filename))
{
//do your task
//File.Copy(file, TargetLocation);
}
}
(new List<String>(array)).Contains(targetString);
- 但从3.5开始,您可以使用IEnumerable<String>.Contains扩展方法,因此它也适用于数组。 - vgruArray.IndexOf(arr, val) >= 0
来检查数组是否包含特定值。 - Mehrdad Afshari