如何转换列表<;T>;到HashSet<;T>;在C#中?
我有一个包含重复对象的列表。为了解决这个问题,我需要将列表转换为哈希集(在C#中)。有人知道怎么做吗?确保对象的类重写如何转换列表<;T>;到HashSet<;T>;在C#中?,c#,list,hashset,C#,List,Hashset,我有一个包含重复对象的列表。为了解决这个问题,我需要将列表转换为哈希集(在C#中)。有人知道怎么做吗?确保对象的类重写等于和GetHashCode,然后您可以将列表传递给HashSet var hashSet=newhashset(yourList); 您可能会看到:另一种方法是 var yourlist = new List<SomeClass>(); // [...] var uniqueObjs = yourlist.Distinct(); //Gives you a
等于和GetHashCode
,然后您可以将列表传递给HashSet
var hashSet=newhashset(yourList);
您可能会看到:另一种方法是
var yourlist = new List<SomeClass>();
// [...]
var uniqueObjs = yourlist.Distinct(); //Gives you a List with unique Objects of the List.
否则,您可以实现自己的IEqualityComnparer
-类并将其传递给distinct
请注意,使用Distinct()
方法,还可以在列表中查找对象的不同属性值:
var uniqueNames = yourlist.Select(obj => obj.Name).Distinct();
还有更多…如果您的类型正确地实现了IEquatable
、Equals()
和GetHashCode()
,那么您就不需要自己执行重复数据消除。您可以使用Linq的Distinct()
这样做:
myList = myList.Distinct().ToList();
这是一个列表,而不是数组。对于这类问题,它们都是IList
。答案解决了这个问题-“HashSet有一个构造函数,它接受一个IEnumerable”。与回答特定问题的答案相比,我更喜欢这个答案。“我想要一个有两扇门的房子,所以我打算用一扇门推平这座房子,然后从头开始建造一座新房子。”你需要在“SomeClass”上实现IEquatable才能做到这一点work@YTAM对我来说,,如果你想在原始列表的基础上创建一个新的Hashset,情况也是如此。仅仅因为它们被认为是重复的,这就意味着它们在某种程度上必须在数学/逻辑上相等。大多数时候,我需要一个集合来从列表中删除重复项。这是一个很好的实现方法;IE:somelist.Distinct();
var uniqueNames = yourlist.Select(obj => obj.Name).Distinct();
myList = myList.Distinct().ToList();