【发布时间】:2012-06-05 21:48:03
【问题描述】:
我有一个 int 数组,其中包含定义数量的元素,所有元素都是正数。我想从这个数组中得到一个所有元素只出现一次的数组。例如如果第一个数组类似于{2000,2011,2011,2012,2009,2009,2000},我想得到这个{2000,2011,2012,2009}。我怎样才能做到这一点?我用 for 循环尝试了很多东西,但我无法做一些好的事情。
【问题讨论】:
标签: c#
我有一个 int 数组,其中包含定义数量的元素,所有元素都是正数。我想从这个数组中得到一个所有元素只出现一次的数组。例如如果第一个数组类似于{2000,2011,2011,2012,2009,2009,2000},我想得到这个{2000,2011,2012,2009}。我怎样才能做到这一点?我用 for 循环尝试了很多东西,但我无法做一些好的事情。
【问题讨论】:
标签: c#
您可以执行以下操作
var yourArray = yourArray.Distinct().ToArray();
http://msdn.microsoft.com/en-us/library/system.linq.enumerable.distinct.aspx
【讨论】:
yourArray = yourArray.Distinct().ToArray();
Distinct返回的值不保证是有序的。如果您希望它按值排序,请使用yourArray.Distinct().OrderBy(x=>x).ToArray()。如果保持原始插入顺序很重要,(正如您的示例可能暗示的那样),您可能希望采用像 Efthimis 那样较慢的选项(但我建议 List<T> 而不是 ArrayList,这是过时的)。
另一种方式:
int[] _array = new int[] {1, 2, 1,2}
var myArray = new System.Collections.ArrayList();
foreach(var item in _array){
if (!myArray.Contains(item))
myArray.Add(item);
}
【讨论】:
除了其他答案之外,您可能还想查看HashSet,尤其是如果您提前知道您将有重复的值。
【讨论】:
使用 LINQ 很容易:
var intArray = new[] { 2000, 2011, 2011, 2012, 2009, 2009, 2000 };
var uniqueArray = intArray.Distinct().ToArray();
http://msdn.microsoft.com/en-us/library/system.linq.enumerable.distinct.aspx
另一种方法是使用Enumerable.GroupBy:
uniqueArray = intArray.GroupBy(i => i).Select(grp => grp.Key).ToArray();
【讨论】: