从C#列表中删除重复项和原始文件

时间:2013-05-16 20:38:44

标签: c# list duplicates

我有一个自定义类型列表,我想要删除副本和原始文件,如果找到重复项。只能是一个可能重复。

我可以覆盖Equals和GetHashCode,然后使用Distinct,但这只会删除副本。我需要删除原始和重复...任何优雅的想法,所以我不必使用锤子。

2 个答案:

答案 0 :(得分:6)

您可以使用GroupBy,然后使用Where (g => g.Count() == 1)过滤掉所有重复的记录:

var res = orig.GroupBy(x => x).Where(g => g.Count() == 1).Select(g => g.Key);

为了实现此目的,您仍需要覆盖GetHashCodeEquals

答案 1 :(得分:3)

var itemsExistingExactlyOnce = list.GroupBy(x => x)
    .Where(group => group.Count() == 1)
    .Select(group => group.Key);