2
이것은 매우 간단한 질문 일 것입니다. 난 단순히 컬렉션에서 중복 바이트 []를 제거하려고 해요.컬렉션에서 중복 바이트 [] 삭제
기본 동작은 참조를 비교하는 것이므로 IEqualityComparer를 만드는 것이 효과적 일지 모르지만 그렇지 않습니다.
HashSet과 LINQ의 Distinct()를 사용해 보았습니다.
샘플 코드 :
using System;
using System.Collections.Generic;
using System.Linq;
namespace cstest
{
class Program
{
static void Main(string[] args)
{
var l = new List<byte[]>();
l.Add(new byte[] { 5, 6, 7 });
l.Add(new byte[] { 5, 6, 7 });
Console.WriteLine(l.Distinct(new ByteArrayEqualityComparer()).Count());
Console.ReadKey();
}
}
class ByteArrayEqualityComparer : IEqualityComparer<byte[]>
{
public bool Equals(byte[] x, byte[] y)
{
return x.SequenceEqual(y);
}
public int GetHashCode(byte[] obj)
{
return obj.GetHashCode();
}
}
}
출력 :
GetHashCode
이
Distinct
에 의해 사용되며, "있는 그대로"작동하지 않습니다
2
감사합니다, 그것을 작동합니다. 어레이의 내용에 Array.GetHashCode()가 의존하지 않는 것 같습니다 (앱을 실행할 때마다 결과가 달라집니다). – GameZelda
@GameZelda - 참으로; 배열은 자신 만의 비교자를 제공 할 때까지 간단하게 참조 동등성을 사용합니다. –