Distinct List<List<int>>?

本文关键字:gt lt List int Distinct | 更新日期: 2023-09-27 18:33:10


我只获取不同的列表有问题。
所以我有:

List<List<int>> combinations = new List<List<int>>();
combinations.Add(new List<int> {1,1});
combinations.Add(new List<int> {1,2});
combinations.Add(new List<int> {1,1}); // Same
combinations.Add(new List<int> {1,3});

我需要做的是只得到:

{1,1}
{1,2}
{1,3}

我试过这个:combinations = combinations.Distinct().ToList();但它不起作用。
任何想法。提前谢谢你。

Distinct List<List<int>>?

您可以使用自己的比较器:

var distincts = 
    combinations
    .Distinct(new ListOfIntComparer());    
class ListOfIntComparer : IEqualityComparer<List<int>>
{
    public bool Equals(List<int> a, List<int> b)
    {
        return
            a.SequenceEqual(b);
    }
    public int GetHashCode(List<int> l)
    {
        unchecked
        {
            int hash = 19;
            foreach (var foo in l)
            {
                hash = hash * 31 + foo.GetHashCode();
            }
            return hash;
         }
    }
}

GetHasCode() Jon Skeet在这里实现。

试图想出最短的一行。这就是我想出的。希望对您有所帮助。

var unique = combinations.GroupBy(x => string.Join(",", x), (g, items) => items.First());

尝试添加一个常规的 int 数组:

List<List<int>> lli = new List<List<int>>();
lli.Add((new int[] { 2, 4 }).ToList<int>());