如何在C#中将List <t>转换为HashSet <t>?

时间:2015-06-25 14:16:23

标签: c# list hashset

我有一个包含重复对象的List。要解决这个问题,我需要将List转换为HashSet(在C#中)。有谁知道怎么做?

3 个答案:

答案 0 :(得分:53)

确保您的对象的类重写EqualsGetHashCode,然后您可以将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以某种方式覆盖GetHashCodeEquals时才可以这样做。

也是如此
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();