Какой самый эффективный способ проверить, есть ли в массиве строк дубликаты в .NET? - PullRequest
2 голосов
/ 29 июня 2010

У меня есть очень, очень большой массив несортированных строк, и мне нужно проверить, есть ли дубликаты.

Какой самый эффективный метод проверки этого?

Ответы [ 2 ]

5 голосов
/ 29 июня 2010

Самый простой способ , вероятно:

if (strings.Length != strings.Distinct().Count())
{
    // There are duplicates
}

Это будет O (n) - но он не скажет , какие элементы были продублированы.

В качестве альтернативы:

HashSet<string> values = new HashSet<string>();
foreach (string x in strings)
{
    if (!values.Add(x))
    {
        // x was a duplicate
    }
}

Опять же, это должно быть амортизировано O (n).

Обратите внимание, что вы можете указать другой IEqualityComparer<string>, если вы хотите регистрнечувствительное сравнение или что-то в этом роде.

0 голосов
/ 29 июня 2010

Прокрутите список и поместите каждый элемент в отсортированное дерево.Таким образом, вы можете заранее определить, есть ли дубликат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...