2014-01-12 36 views
-2

如果我有一个数组用于示例[1 4 3 7 4 9 5 1 5 6 3]删除数组C中的相同元素#

如何删除重复数字并给出像这样的输出数组[1 4 3 7 9 5 6]

+0

你可以在你清楚linq – Arshad

+0

所以你有什么尝试。一个循环,一个lambda,一个集合,LinQ。表面上看,这应该是微不足道的。 –

+0

你也可以简单地将数组拷贝到一个散列中,这个键和值是一样的。结果将是唯一的 – TravellingGeek

回答

5

鲜明的()

var distinctArray = myArray.Distinct().ToArray(); 
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

+0

@Baldrick你在文档中发现了什么? – Magnus

+0

@Magnus我没有,这是一个错误。道歉,原创评论删除。 – Baldrick

+1

我想现在就下载LINQPad :) – pcnThird

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(); 
2

夫妇的建议,发现搜索:

1。 )

int[] s = { 1, 2, 3, 3, 4}; 
int[] q = s.Distinct().ToArray(); 

2.)最简单的解决方案是简单地对数组进行排序(如果可以使用它们,则将标准实现采用O(n log n))。否则考虑做一个简单的随机quicksort(代码甚至在wikipedia上))。

之后再扫描一次。在扫描过程中,简单地排除连续的相同元素

如果你想在O(n)中做到这一点,你也可以使用HashSet中已经看到的元素。只需遍历数组,每个元素检查它是否在你的HashSet中。

如果它不在那里,请添加它。如果它在那里,请将它从阵列中移除。

请注意,这将需要一些额外的内存,哈希将有一个恒定的因素,有助于您的运行时。 Althought的时间复杂度比较好,实际运行时将只磺酰基会更快,一旦你超过一定的数组的大小

1

如果出于某种原因,不想使用Linq:

List<int> distinctList = new List<int>(); 
foreach (var num in numberList) 
{ 
    if (!distinctList.Contains(num)) 
    { 
     distinctList.Add(num); 
    } 
} 
+0

'HashSet'应该在这里,O(1)查找。 – Magnus

+1

绝对。但是Soner打败了我。 – Marco