如果我有示例 [1 4 3 7 4 9 5 1 5 6 3]
的一个数组。
如何删除重复数字并在输出数组中输入[1 4 3 7 9 5 6]
?
答案 0 :(得分:5)
鲜明()
var distinctArray = myArray.Distinct().ToArray();
答案 1 :(得分:3)
您可以在HashSet<int>
构造函数中调用数组。 HashSet
是一种优化的集合。它的构造函数消除了非唯一元素。
这是LINQPad;
中的示例var array = new[]{1, 4, 3, 7, 4, 9, 5, 1, 5, 6, 3};
HashSet<int> h = new HashSet<int>(array);
h.ToArray().Dump();
这是一个结果;
答案 2 :(得分:2)
这个怎么样:
int[] arr = { 1, 4, 3, 7, 4, 9, 5, 1, 5, 6, 3 };
foreach (int item in arr.Distinct())
{
Console.WriteLine(item);
}
你也可以像这样分配一个数组:
int[] unique = arr.Distinct().ToArray();
答案 3 :(得分:2)
一些建议发现了搜索:
1)
int[] s = { 1, 2, 3, 3, 4};
int[] q = s.Distinct().ToArray();
2。)最简单的解决方案是简单地对数组进行排序(如果你可以使用标准实现,则采用O(n log n)。否则考虑制作一个简单的随机快速排序(代码甚至可以在维基百科上)。 / p>
然后再扫描一次。在该扫描期间,简单地消除连续的相同元素。
如果你想在O(n)中这样做,你也可以使用你已经看过的元素的HashSet。只需在您的数组上迭代一次,就每个元素检查它是否在您的HashSet中。
如果不在那里,请添加它。如果它在那里,将其从阵列中删除。
请注意,这将需要一些额外的内存,并且散列将具有一个有助于运行时的常量因子。虽然时间复杂度更好,但实际运行时只有在超过某个数组大小时才会更快
答案 4 :(得分:1)
如果您出于某种原因不想使用Linq:
List<int> distinctList = new List<int>();
foreach (var num in numberList)
{
if (!distinctList.Contains(num))
{
distinctList.Add(num);
}
}