【问题标题】:Return unique values without removing duplicates - C#在不删除重复项的情况下返回唯一值 - C#
【发布时间】:2014-12-04 22:20:06
【问题描述】:

我知道在删除重复项后返回数组中的唯一值有很多答案,但是在删除重复项后数组中的每个元素不是唯一的吗?我只想在删除任何重复项之前返回唯一的值。如果元素在原始数组中重复,我不希望它出现在我的最终数组中。

所以这个数组...

[0, 1, 1, 2, 3, 3, 3, 4]

应该只返回:

[0, 2, 4]

另一种表述方式是删除所有重复项以及曾经重复的所有唯一值。

我来自 JavaScript 背景,但对 C# 语法仍然有些不满意。 :)

【问题讨论】:

    标签: c# arrays duplicates unique


    【解决方案1】:

    最简单的方法是使用 LINQ,按值分组,计算每个组中元素的数量,然后返回具有单个值的组的键:

    var singleOccurrences = array.GroupBy(x => x)
                                 .Where(g => g.Count() == 1)
                                 .Select(g => g.Key)
                                 .ToArray();
    

    如果您确实需要这对大输入有效,您可以编写自己的方法来跟踪“具有单个值的元素”和“具有多个值的元素”作为集合。不过我会从这个开始:)

    【讨论】:

    • 谢谢你!输入将限制在 50 个左右的值 - 可能仍然足够小,不会遇到任何效率问题。
    【解决方案2】:

    你可以使用GroupBy方法

    var uniqueNumbers = numbers.GroupBy(x => x)
                       .Where(x => x.Count() == 1)
                       .Select(g => g.Key)
                       .ToArray();
    

    这基本上会将所有数字分组,然后取其中有一个数字的那些组。

    【讨论】:

    • 只需一根头发即可快速回复 :) 谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-14
    • 1970-01-01
    • 2016-02-04
    • 2023-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多