按数组内容分组

时间:2013-04-05 18:38:59

标签: c# linq lambda linq-group

我有一个List<Tuple<string,long,byte[]>>,我希望按字节数组的内容进行分组。

有一种简单的方法可以使用GroupBy和lambda吗?

理想情况下,我想在不创建中间数据结构的情况下执行此操作(如用于保存数组元素的字符串)。

1 个答案:

答案 0 :(得分:3)

您可以使用自定义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>())