【问题标题】:Deleting same elements in array C# [duplicate]删除数组C#中的相同元素[重复]
【发布时间】:2014-01-31 06:31:06
【问题描述】:

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

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

【问题讨论】:

  • 你能在 linq 上与众不同
  • 那么你有什么尝试。一个循环,一个 lambda,一个集合,LinQ。从表面上看,这应该是微不足道的。
  • 您也可以简单地将数组复制到哈希中,键与值相同。结果将是唯一的

标签: c# arrays


【解决方案1】:

不同的()

var distinctArray = myArray.Distinct().ToArray();

【讨论】:

    【解决方案2】:

    您可以在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();
    

    这是一个结果;

    【讨论】:

    • @Baldrick 您在文档中哪里找到的?
    • @Magnus 我没有,这是一个错误。抱歉,原评论已删除。
    • 我现在想下载 LINQPad :)
    【解决方案3】:

    这个呢:

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

    【讨论】:

      【解决方案4】:

      在搜索中找到了几条建议:

      1.)

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

      2.) 最简单的解决方案是简单地对数组进行排序(如果你可以使用它们,使用标准实现需要 O(n log n)。否则考虑进行简单的随机快速排序(代码甚至在维基百科上))。

      然后再扫描一次。在该扫描期间,简单地消除连续相同的元素。

      如果你想在 O(n) 内完成,你也可以使用 HashSet 和你已经见过的元素。只需遍历您的数组一次,检查每个元素是否在您的 HashSet 中。

      如果它不在那里,请添加它。如果它在那里,请将其从数组中删除。

      请注意,这将占用一些额外的内存,并且散列将有一个有助于您运行时的常数因素。虽然时间复杂度更好,但实际运行时间只有超过一定的数组大小才会更快

      【讨论】:

        【解决方案5】:

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

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

        【讨论】:

        • HashSet 最好在这里,使用 O(1) 查找。
        • 绝对。但 Soner 打败了我。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多