将字符串与C#2.0中的字符串数组进行比较的最快方法

时间:2009-06-26 21:02:29

标签: c# .net arrays string comparison

将字符串与C#2.0中的字符串数组进行比较的最快方法是什么

4 个答案:

答案 0 :(得分:32)

你想要什么样的比较?你想知道给定的字符串是否在数组中吗?

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)) ...

答案 1 :(得分:7)

你是想看看字符串是否在数组中?我不记得数组是否支持.Contains()方法,所以如果不支持,则创建一个List&lt; string&gt ;,通过AddRange()将您的数组添加到列表中,然后调用list.Contains({string to compare})。将返回一个布尔值,指示字符串是否在数组中。

答案 2 :(得分:5)

如果您使用单个数组执行此操作多次,则应对数组进行排序并对其进行二进制搜索:

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;

答案 3 :(得分:-1)

//从源中获取列表中的数据                 清单清单= Directory.GetFiles(SourcePath,“ ”,SearchOption.AllDirectories)。其中(x => x.ToLower()。EndsWith(“ apk”))。ToList();

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