检查array的所有值是否不同

本文关键字:是否 array 检查 | 更新日期: 2023-09-27 18:09:54

我有一个像这样的一维数组:

int[] values = new int[5] { 1, 2, 3, 4, 5 };

现在我这样做来检查是否所有的值都是不同的:

bool all_values_are_different()
{
   for(int i = 0; i < values.Length - 1; i++)
   {
      search = values[i];
      for(int j = i + 1; j < 5; i++)
      {
         if(search == values[i])
            return false;
      } 
   }
   return true;
}
c#中是否有方法可以检查数组中的所有值是否不同?

检查array的所有值是否不同

有几种方法:

// 1
values.Distinct().Count() == values.Length;
// 2
new HashSet<int>(values).Count == values.Length;
// 3.1
!values.Any(x => values.Count(y => x == y) > 1);

// 3.2
values.All(x => values.Count(y => x == y) == 1);

如果这些表达式中的任何一个的结果是false,这意味着你的数组有重复项,否则所有元素都是唯一的。

可以对数组进行排序。数据将在的位置中排序,而不像其他方法那样创建一个新的数组,因此应该更快,特别是当您希望稍后对数据进行排序时(例如用于二进制搜索或显示)。而且只有O(n log n)而不是O(n2)

Array.Sort(values);
for (int i = 0; i < values.Length - 1; i++)
{
    if (values[i] == values[i + 1])
        return false;
}
return true;

当你既想要排序数组又想要原始数组时,或者仅仅因为你不想修改输入,你也可以复制到一个新的排序数组。我认为它仍然比O(n2)方法或一些使用集合的解决方案快,特别是对于大输入


如果要保留原始数组,则使用另一种解决方案

var valueList = new HashSet<int>();
foreach (var v in values)
{
    if (valueList.Contains(v)
        return false;
    else
        valueList.Add(v);
}
return true;

这比Selman Genç的第二个解决方案更快,因为它不填充整个集合,并且尽可能早地返回

试试这个

 var duplicates = arrayToCheck
    .GroupBy(s => s)
    .Where(g => g.Count() > 1)
    .Select(g => g.Key);

   return (duplicates.Count() > 0);

p。S

return  arraylist.Distinct().Count() == arraylist.Length;