对可枚举对象的可枚举对象调用.distinct()

本文关键字:对象 枚举 distinct 调用 | 更新日期: 2023-09-27 18:13:25

在我当前的LINQ查询结束时,我有IEnumerable<IEnumerable<int>>形式的数据,有几个重复的组合。

例如:

{
  {5, 20}
  {5, 20}
  {10, 15}
}

什么是最好的方法来过滤这些,使每个集合只表示一次?一个LINQ的答案将是理想的,所以我可以进一步链。

对可枚举对象的可枚举对象调用.distinct()

如果像这样创建一个序列相等比较器:

class SequenceEqualityComparer<T> : IEqualityComparer<IEnumerable<T>> {
    public bool Equals(IEnumerable<T> a, IEnumerable<T> b) {
        if (a == null) return b == null;
        if (b == null) return false;
        return a.SequenceEqual(b);
    }
    public int GetHashCode(IEnumerable<T> val) {
        return val.Where(v => v != null)
                .Aggregate(0, (h, v) => h ^ v.GetHashCode());
    }
}

然后,您可以调用.Distinct(new SequenceEqualityComparer<int>())