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

时间:2010-06-29 07:31:05

标签: .net arrays string

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

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

2 个答案:

答案 0 :(得分:5)

最简单的方式可能是:

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>

答案 1 :(得分:0)

遍历列表,并将每个元素放在已排序的树中。这样,您可以及早发现是否存在重复。