我有一个List<T>
where T 是一个自定义对象。我的对象都不相等,但有些对象可能具有相等的属性。有什么快速的方法可以通过比较属性来删除重复项?哪些重复项留在列表中并不重要。
问问题
3818 次
4 回答
19
您可以使用它List<T>.RemoveAll
来有效地执行此操作。
例如,如果你想删除Foo
属性值为 42 的所有元素,你可以这样做:
theList.RemoveAll(i => i.Foo == 42);
如果您尝试按属性制作不同项目的列表,即:仅保留不同的 Foo 项目,我建议您执行以下操作:
HashSet<int> elements = new HashSet<int>(); // Type of property
theList.RemoveAll(i => !elements.Add(i.Foo));
这将跟踪哪些元素是“不同的”并删除所有其他元素。
于 2012-08-20T18:03:14.253 回答
8
根据属性值对对象进行分组,然后选择每个组中的第一项。像这样:
var distinctObjects = objects
.GroupBy(x => x.Property)
.Select(g => g.First());
于 2012-08-20T18:09:17.607 回答
2
IEqualityComparer<T>
您可以创建一个通过比较属性来实现的新类。然后,您可以使用 linq 的Distinct
方法来获取仅包含唯一元素的 IEnumerable。
于 2012-08-20T18:06:44.923 回答
0
您也可以从这里使用一个非常好的库http://powercollections.codeplex.com/
并使用Algorithms.RemoveDuplicates
方法。那个图书馆有更多的收藏品。
于 2012-08-20T18:05:20.233 回答