如何检查我的数组中是否有重复的值?

pur*_*ppc 16 c# arrays repeat

所以这是我的阵列.

double[] testArray = new double[10];
// will generate a random numbers from 1-20, too lazy to write the code
Run Code Online (Sandbox Code Playgroud)

我想创建一个搜索循环来检查是否有重复的值.我怎么做?

我宁愿不使用任何特殊的内置方法,因为这是一个小数组.

p.s*_*w.g 39

你可以用一点Linq做到这一点:

if (testArray.Length != testArray.Distinct().Count())
{
    Console.WriteLine("Contains duplicates");
}
Run Code Online (Sandbox Code Playgroud)

Distinct扩展方法除去任何重复,并且Count得到的结果集的大小.如果它们完全不同,那么列表中会有一些重复.

或者,这是更复杂的查询,但它可能更有效:

if (testArray.GroupBy(x => x).Any(g => g.Count() > 1))
{
    Console.WriteLine("Contains duplicates");
}
Run Code Online (Sandbox Code Playgroud)

GroupBy方法将基团的任何相同的元件一起,并Any返回true,如果任何的基团的具有一个以上的元件.

上述两种解决方案都可以通过使用a来实现HashSet<T>,但您可以直接使用它,如下所示:

if (!testArray.All(new HashSet<double>().Add))
{
    Console.WriteLine("Contains duplicates");
}
Run Code Online (Sandbox Code Playgroud)

或者,如果您更喜欢完全不依赖于Linq的解决方案:

var hashSet = new HashSet<double>();
foreach(var x in testArray) 
{
    if (!hashSet.Add(x)) 
    {
        Console.WriteLine("Contains duplicates");
        break;
    }
}
Run Code Online (Sandbox Code Playgroud)