返回唯一值而不删除重复项 - C#

时间:2014-10-09 20:48:49

标签: c# arrays duplicates unique

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

所以这个阵列......

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

应仅返回:

[0, 2, 4]

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

我来自JavaScript背景,并且对C#语法仍然有些不稳定。 :)

2 个答案:

答案 0 :(得分:6)

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

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

如果你真的需要这对大输入有效,你可以编写自己的方法,用单个值跟踪"元素"和#34;具有多个值的元素"作为集。我虽然从这开始:)

答案 1 :(得分:6)

您可以使用GroupBy方法

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

这将基本上对所有数字进行分组,然后取出那些包含一个数字的组。

相关问题