我有一个像这样的一维数组:
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#中是否有任何方法可以检查数组中的所有值是否都不同?
答案 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;