Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C#2.0中比较字符串与字符串数组的最快方法_C#_.net_Arrays_String_Comparison - Fatal编程技术网

在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

在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, "items > index" are larger and "< index" are smaller.

你的意思是看字符串是否在数组中?我不记得数组是否支持.Contains()方法,因此如果不支持,请创建一个列表,通过AddRange()将数组添加到列表中,然后调用List.Contains({string to compare})。将返回一个布尔值,指示字符串是否在数组中。

要进行哪种比较?您想知道给定的字符串是否在数组中吗

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);
                }
            }