所以这是我的阵列.
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)