删除数组C#中的相同元素

时间:2014-01-12 14:07:15

标签: c# arrays

如果我有示例 [1 4 3 7 4 9 5 1 5 6 3]的一个数组。

如何删除重复数字并在输出数组中输入[1 4 3 7 9 5 6]

5 个答案:

答案 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();

这是一个结果;

enter image description here

答案 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);
    }
}