检查字符串数组是否在.NET中有任何重复项的最有效方法是什么

Dis*_*ive 2 .net arrays string

我有一个非常非常大的未排序的字符串数组,我需要检查是否有重复.

检查这个的最有效方法是什么?

Jon*_*eet 5

最简单的方法可能是:

if (strings.Length != strings.Distinct().Count())
{
    // There are duplicates
}
Run Code Online (Sandbox Code Playgroud)

这将是O(n) - 但它不会告诉你哪些项目是重复的.

或者:

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

同样,这应该摊销O(n).

请注意,IEqualityComparer<string>如果您想要不区分大小写的比较,或者类似的东西,您可以指定不同的.