我有一个List<Tuple<string,long,byte[]>>
,我希望按字节数组的内容进行分组。
有一种简单的方法可以使用GroupBy
和lambda吗?
理想情况下,我想在不创建中间数据结构的情况下执行此操作(如用于保存数组元素的字符串)。
答案 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>())