我有一个List<Tuple<string,long,byte[]>>
,我想按字节数组的内容进行分组。
GroupBy
有没有一种简单的方法可以使用 lambda来做到这一点?
理想情况下,我想在不创建中间数据结构(如保存数组元素的字符串)的情况下做到这一点。
我有一个List<Tuple<string,long,byte[]>>
,我想按字节数组的内容进行分组。
GroupBy
有没有一种简单的方法可以使用 lambda来做到这一点?
理想情况下,我想在不创建中间数据结构(如保存数组元素的字符串)的情况下做到这一点。
您可以使用自定义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>())