检查数组的所有值是否不同

时间:2014-06-21 05:55:28

标签: c# arrays distinct-values

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

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#中是否有任何方法可以检查数组中的所有值是否都不同?

3 个答案:

答案 0 :(得分:12)

有几种方法:

// 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 ,则表示您的数组有重复项,否则所有元素都是唯一的。

答案 1 :(得分:1)

如果可能,您可以对数组进行排序。数据将按原样排序而不像其他方法那样创建新数组,因此应该更快,特别是当您希望以后对数据进行排序时(如二进制搜索或显示)

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

如果您想要排序和原始数组,或者只是因为您不想修改输入,也可以复制到新的排序数组。我认为它仍然比O(n²)方法或某些使用集合

的解决方案更快

答案 2 :(得分:0)

试试这个

 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;