在C#2.0中比较字符串与字符串数组的最快方法
在C#2.0中,比较字符串与字符串数组的最快方法是什么?如果使用单个数组多次比较,则应对数组排序并进行二进制搜索:在C#2.0中比较字符串与字符串数组的最快方法,c#,.net,arrays,string,comparison,C#,.net,Arrays,String,Comparison,在C#2.0中,比较字符串与字符串数组的最快方法是什么?如果使用单个数组多次比较,则应对数组排序并进行二进制搜索: Array.Sort(array); int index = Array.BinarySearch(array, input); // if (index < 0) // does not exists, "items > ~index" are larger and "< ~index" are smaller // otherwise, "item
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.
你的意思是看字符串是否在数组中?我不记得数组是否支持.Contains()方法,因此如果不支持,请创建一个列表
bool targetStringInArray = array.Contains(targetString);
是否需要比较值数组(正、负、零)
如果要检查包含(即第一个选项),并且要使用多个字符串执行此操作,则最好从数组中构建HashSet
:
var stringSet = new HashSet<string>(array);
if (stringSet.Contains(firstString)) ...
if (stringSet.Contains(secondString)) ...
if (stringSet.Contains(thirdString)) ...
if (stringSet.Contains(fourthString)) ...
var stringSet=newhashset(数组);
如果(stringSet.Contains(firstString))。。。
如果(stringSet.Contains(secondString))。。。
如果(stringSet.Contains(thirdString))。。。
如果(stringSet.Contains(fourthString))。。。
//从源代码获取列表中的数据
列表清单=Directory.GetFiles(SourcePath,“.”,SearchOption.AllDirectories)。其中(x=>x.ToLower().EndsWith(“apk”)).ToList()
//从文本文件获取日期
List ls=ReadFile();
foreach(清单中的字符串文件)
{
//获取文件名
字符串文件名=Path.GetFileName(文件);
字符串TargetLocation=Path.Combine(TargetPath,文件名);
//现在将单个字符串与列表进行比较
//它屈服于真与假
if(ls.Contains(文件名))
{
//完成你的任务
//File.Copy(文件,TargetLocation);
}
}
如果要多次执行此操作,则有比二进制搜索更高效的搜索(无论如何,假设它相当大)。我会选择基于哈希的东西,例如HashSet.yes。哈希表/二进制搜索树辩论。。。不过,两者都比搜索整个阵列好。HashSet仅在3.5版本中可用。正确,在2.0版本中,您必须执行(新列表(数组))。包含(targetString)代码>-但从3.5开始,您有IEnumerable.Contains扩展方法,因此它也可用于数组。在2.0中,您可以使用简单的数组检查数组是否包含特定值。IndexOf(arr,val)>=0
。
var comparisons = array.Select(x => targetString.CompareTo(x));
var stringSet = new HashSet<string>(array);
if (stringSet.Contains(firstString)) ...
if (stringSet.Contains(secondString)) ...
if (stringSet.Contains(thirdString)) ...
if (stringSet.Contains(fourthString)) ...
//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);
}
}