我有一个包含重复对象的List。要解决这个问题,我需要将List转换为HashSet(在C#中)。有谁知道怎么做?
答案 0 :(得分:53)
确保您的对象的类重写Equals
和GetHashCode
,然后您可以将List<T>
传递给HashSet<T>
constructor。
var hashSet = new HashSet<YourType>(yourList);
您可能会看到:What is the best algorithm for an overridden System.Object.GetHashCode?
答案 1 :(得分:6)
另一种方式是
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);
否则,您可以实现自己的IEqualityComnparer
- 类并将其传递给distinct。
请注意,使用Distinct()
方法,您还可以在列表中查找对象的不同属性值:
var uniqueNames = yourlist.Select(obj => obj.Name).Distinct();
还有一些......
答案 2 :(得分:4)
如果您的类型正确实现了IEquatable<T>
,Equals()
和GetHashCode()
,那么您自己就不需要进行重复数据删除。你可以使用Linq的Distinct()
这样做:
myList = myList.Distinct().ToList();