Вы можете создать реализацию IEqualityComparer<List<int>>
(и использовать метод SequenceEqual
для равенства списка)
public class ListComparer : IEqualityComparer<List<int>>
{
public bool Equals(List<int> x, List<int> y)
{
return x.SequenceEqual(y);
}
public int GetHashCode(List<int> obj)
{
return obj.Aggregate(19, (current, item) => current ^ item.GetHashCode());
}
}
И передать его Distinct
метод
var set = new HashSet<List<int>>
{
new List<int>() {1, -2, -1, 2}, new List<int>() {3, -2, 1, 1}, new List<int>() {1, -2, -1, 2}
};
var result = set.Distinct(new ListComparer());
Позволяет удалить {1,-2,-1,2}
дублированную запись.
Вы также можете передать экземпляр ListComparer
в конструктор HashSet
и получить избавиться от добавления дублирующих списков
var set = new HashSet<List<int>>(new ListComparer())
{
new List<int>() {1, -2, -1, 2}, new List<int>() {3, -2, 1, 1}, new List<int>() {1, -2, -1, 2}
};
В приведенном выше примере set
будет содержать только два элемента без дублированных списков