나는 List<Tuple<string,long,byte[]>>
을 가지고 있으며 바이트 배열의 내용으로 그룹화하려고합니다.배열 내용으로 그룹화
GroupBy
과 람다로이 작업을 수행하는 간단한 방법이 있습니까?
이상적으로는 배열의 요소를 보유 할 문자열과 같은 중간 데이터 구조를 만들지 않고이 작업을 수행하고 싶습니다.
나는 List<Tuple<string,long,byte[]>>
을 가지고 있으며 바이트 배열의 내용으로 그룹화하려고합니다.배열 내용으로 그룹화
GroupBy
과 람다로이 작업을 수행하는 간단한 방법이 있습니까?
이상적으로는 배열의 요소를 보유 할 문자열과 같은 중간 데이터 구조를 만들지 않고이 작업을 수행하고 싶습니다.
당신은 달성 할 수 있습니다 (더 나은 또는 일반적인 하나 IEqualityComparer<T[]>
) 사용자 정의 IEqualityComparer<byte[]>
사용하여 구현 :
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>())
이것은 매우 효율적인 해시 코드 생성 방법은 아니지만 작동합니다. – Servy
제가 말했듯이, 그것은 단지 하나의 예입니다. – MarcinJuraszek
OP가 GetHashCode 방법이 좋지 않거나 해결 방법을 알지 못할 가능성이 있습니다. 그는 단지 한두 번 시험해보고 올바른 결과를보고 다시 만지지 마십시오. – Servy
? 개별 바이트 항목을 키로 얻은 경우 나머지 결과는 무엇입니까? – itsme86
내 목록의 항목이 해당 배열의 내용으로 그룹화되기를 바랍니다. 나는. 배열이 같으면 동일한 그룹에 속하지만 배열이 다른 그룹에 속합니다. – soandos
배열에 대한 동일성을 동일한 배열에 대한 참조 또는 서로 다른 배열에 같은 바이트를 갖는 것으로 정의하고 있습니까? 후자의 경우,'byte []'에 대한 커스텀 동등 비교자를 정의 할 필요가있다. – Servy