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

17

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

    
задан Greens 26.06.2009 в 23:02
источник

3 ответа

7

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

    
ответ дан James McConnell 26.06.2009 в 23:06
источник
31

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

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)) ...
    
ответ дан Jon Skeet 26.06.2009 в 23:06
источник
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;
    
ответ дан Mehrdad Afshari 26.06.2009 в 23:06
источник