检查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#中是否有方法可以检查数组中的所有值是否不同?
有几种方法:
// 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;