【发布时间】:2015-08-03 15:04:20
【问题描述】:
我需要删除重复项,还要记录我要删除的内容。我现在有两种解决方案,一种可以遍历每个重复项,另一种可以删除重复项。我知道在 foreach 中就地删除是危险的,所以我有点坚持如何尽可能高效地做到这一点。
我现在得到了什么
var duplicates = ListOfThings
.GroupBy(x => x.ID)
.Where(g => g.Skip(1).Any())
.SelectMany(g => g);
foreach (var duplicate in duplicates)
{
Log.Append(Logger.Type.Error, "Conflicts with another", "N/A", duplicate.ID);
}
ListOfThings = ListOfThings.GroupBy(x => x.ID).Select(y => y.First()).ToList();
【问题讨论】:
-
也许这个链接对你有帮助:blogs.msdn.com/b/bclteam/archive/2006/11/09/…
-
试试:
var duplicateItems = list.GroupBy(x => x.ID).Where(x => x.Count() > 1).Select(x => x.Key); -
@jacoblam 这如何让我报告错误并同时删除它们?
-
这些只是重复的,因此您可以在
foreach循环中报告它们。删除它们可以以不同的方式完成,我在下面的答案中建议了一个哈希集,并且可以提供详细信息。
标签: c# linq list duplicates