【问题标题】:How to delete duplicate values in an array? [duplicate]如何删除数组中的重复值? [复制]
【发布时间】:2012-06-05 21:48:03
【问题描述】:

可能重复:
Remove duplicates from array

我有一个 int 数组,其中包含定义数量的元素,所有元素都是正数。我想从这个数组中得到一个所有元素只出现一次的数组。例如如果第一个数组类似于{2000,2011,2011,2012,2009,2009,2000},我想得到这个{2000,2011,2012,2009}。我怎样才能做到这一点?我用 for 循环尝试了很多东西,但我无法做一些好的事情。

【问题讨论】:

    标签: c#


    【解决方案1】:

    您可以执行以下操作

    var yourArray = yourArray.Distinct().ToArray();
    

    http://msdn.microsoft.com/en-us/library/system.linq.enumerable.distinct.aspx

    【讨论】:

    • 那只会创建一个 IEnumerable,而不是一个数组。要返回一个新数组,您需要在结果上调用 ToArray。比如:yourArray = yourArray.Distinct().ToArray();
    • 我已经编辑了我的答案,即使只是为了给 OP 一个正确的前进方向
    • 注意Distinct返回的值不保证是有序的。如果您希望它按值排序,请使用yourArray.Distinct().OrderBy(x=>x).ToArray()。如果保持原始插入顺序很重要,(正如您的示例可能暗示的那样),您可能希望采用像 Efthimis 那样较慢的选项(但我建议 List<T> 而不是 ArrayList,这是过时的)。
    • 在这种情况下,顺序并不重要,您可以查看输出 {2000,2011,2012,2009}
    【解决方案2】:

    另一种方式:

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

    【讨论】:

      【解决方案3】:

      除了其他答案之外,您可能还想查看HashSet,尤其是如果您提前知道您将有重复的值。

      【讨论】:

        【解决方案4】:

        使用 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();
        

        【讨论】:

          猜你喜欢
          • 2018-02-13
          • 2012-10-06
          • 1970-01-01
          • 1970-01-01
          • 2015-09-24
          • 1970-01-01
          • 2013-04-10
          • 2019-02-23
          • 2011-08-05
          相关资源
          最近更新 更多