我有一个包含对象重复的列表,为了解决这个问题,我需要将列表转换成HashSet(在C#中)。有人知道如何做吗?
请确保对象的类重写了Equals
和GetHashCode
方法,然后您就可以将List<T>
传递给HashSet<T>
构造函数。
var hashSet = new HashSet<YourType>(yourList);
另外一种方式是
var yourlist = new List<SomeClass>();
// [...]
var uniqueObjs = yourlist.Distinct(); //Gives you a List with unique Objects of the List.
请注意,只有在SomeClass
以某种方式重写GetHashCode
和Equals
时才有可能实现此目的。这也适用于
var uniqueObjs = new HashSet<SomeType>(yourOriginalList);
否则,您可以实现自己的 IEqualityComparer
类,并将其传递给 distinct 方法。Distinct()
方法,您还可以查找列表中对象的不同属性值。var uniqueNames = yourlist.Select(obj => obj.Name).Distinct();
还有更多...
IEquatable<T>
,并且Equals()
和GetHashCode()
正确地实现了,那么你不需要自己进行去重。你可以像这样使用Linq的Distinct()
来完成去重:myList = myList.Distinct().ToList();
IList<YourType>
。 - Richard