Самый быстрый способ сравнить строку с массивом строк в C # 2.0 - PullRequest
17 голосов
/ 27 июня 2009

Какой самый быстрый способ сравнить строку с массивом строк в C # 2.0

Ответы [ 4 ]

32 голосов
/ 27 июня 2009

Какое сравнение вы хотите? Вы хотите знать, находится ли данная строка в массиве?

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)) ...
7 голосов
/ 27 июня 2009

Вы хотите увидеть, находится ли строка в массиве? Я не могу вспомнить, поддерживают ли массивы метод .Contains (), поэтому, если нет, создайте List , добавьте свой массив в список с помощью AddRange (), а затем вызовите list.Contains ({строка для сравнения}). Возвращает логическое значение, указывающее, находится ли строка в массиве.

5 голосов
/ 27 июня 2009

Если вы делаете это много раз с одним массивом, вы должны отсортировать массив и выполнить двоичный поиск по нему:

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;
0 голосов
/ 02 августа 2018

// получить данные в списке из источника Контрольный список списка = 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);
                }
            }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...