组由数组的内容(Group by array contents)

2019-09-29 05:34发布

我有一个List<Tuple<string,long,byte[]>>和我通过字节数组的内容要组。

有没有一种简单的方法有做到这一点GroupBy和拉姆达?

理想情况下,我想这样做而无需创建的中间数据结构(如一个字符串来保存阵列的元素)。

Answer 1:

你可以做到这一点使用自定义IEqualityComparer<byte[]>甚至更好,一般一个: IEqualityComparer<T[]>实现:

class ArrayComparer<T> : IEqualityComparer<T[]>
{
    public bool Equals(T[] x, T[] y)
    {
        return x.SequenceEqual(y);
    }

    public int GetHashCode(T[] obj)
    {
        return obj.Aggregate(string.Empty, (s, i) => s + i.GetHashCode(), s => s.GetHashCode());
    }
}

我敢肯定GetHashCode可以实现更好的,但它只是一个例子!

用法:

var grouped = source.GroupBy(i => i.Item3, new ArrayComparer<byte>())


文章来源: Group by array contents