Строка в массиве?

Каков был бы лучший способ посмотреть в a string[] видеть, содержит ли это элемент. Это было моим первым выстрелом в него. Но возможно существует что-то, что я пропускаю. Размер массива будет не больше, чем 200 элементов.

bool isStringInArray(string[] strArray, string key)
{
    for (int i = 0; i <= strArray.Length - 1; i++)
        if (strArray[i] == key)
            return true;
    return false;
}
98
задан Alexei Levenkov 29 December 2018 в 08:41
поделиться

7 ответов

Просто уже используйте встроенный, Содержит () метод:

using System.Linq;

//...

string[] array = { "foo", "bar" };
if (array.Contains("foo")) {
    //...
}
194
ответ дан Dave Markle 24 November 2019 в 05:10
поделиться

Вы просто после Массива. Существует функция (или Содержит дополнительный метод, если Вы используете.NET 3.5, который немного более удобен).

12
ответ дан Noldorin 24 November 2019 в 05:10
поделиться

Linq (для s& g's):

var test = "This is the string I'm looking for";
var found = strArray.Any(x=>x == test);

или, в зависимости от требований

var found = strArray.Any(
    x=>x.Equals(test, StringComparison.OrdinalIgnoreCase));
6
ответ дан 24 November 2019 в 05:10
поделиться

Массив отсортирован? Раз так Вы могли сделать двоичный поиск . Вот реализация.NET также. , Если массив отсортирован затем, двоичный поиск улучшит производительность по любому повторяющемуся решению.

6
ответ дан Andrew Hare 24 November 2019 в 05:10
поделиться

Массивы являются, в целом, плохой структурой данных, чтобы использовать, если Вы хотите спросить, находится ли конкретный объект в наборе или нет.

, Если Вы будете запускать этот поиск часто, это могло бы стоить того для использования Dictionary<string, something>, а не массив. Поиски в Словаре являются O (1) (постоянно-разовый), в то время как поиск массива является O (N) (занимает время пропорциональный длине массива).

, Даже если массив является только 200 объектами самое большее, если Вы делаете много этих поисков, Словарь, вероятно, будет быстрее.

2
ответ дан Zack Elan 24 November 2019 в 05:10
поделиться

Можно также использовать LINQ для итерации по массиву. или можно использовать метод Находки, который берет делегата для поиска его. Однако я думаю, что метод находки является немного более дорогим затем просто цикличное выполнение через.

1
ответ дан masfenix 24 November 2019 в 05:10
поделиться

Это более быстро, чем итерация через массив вручную:

static bool isStringInArray(string[] strArray, string key)
    {

        if (strArray.Contains(key))
            return true;
        return false;
    }
0
ответ дан 2 revs 24 November 2019 в 05:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: