bir eşitlik karşılaştırıcısı alır Enumerable.Distinct aşırı yüklenmesini kullanabilirsiniz almak gerekir. senin int
dizileri her iki öğe uzunsa da bir olmadan Distinct
kullanmanızı sağlayacak olan yerine Tuple
s kullanabilirsiniz,
class IntArrayComparer : IEqualityComparer<int[]>
{
public bool Equals(int[] left, int[] right)
{
if (left.Length != right.Length) return false;
return left.SequenceEquals(right);
}
public int GetHashCode(int[] arr)
{
unchecked
{
int hc = 1;
foreach (int val in arr) hc = hc * 397^val.GetHashCode();
}
}
}
:
class IntPairArrayComparer : IEqualityComparer<int[]>
{
public bool Equals(int[] left, int[] right)
{
if (left.Length != 2) throw new ArgumentOutOfRangeException("left");
if (right.Length != 2) throw new ArgumentOutOfRangeException("right");
return left[0] == right[0] && left[1] == right[1];
}
public int GetHashCode(int[] arr)
{
unchecked
{
return (arr[0].GetHashCode() * 397)^arr[1].GetHashCode();
}
}
}
IEnumerable<int[]> distinctPairs = propIDs.Distinct(new IntPairArrayComparer());
Eğer çiftleri daha büyük koleksiyonları istiyorsanız özel eşitlik karşılaştırıcısı:
IEnumerable<Tuple<int, int>> propIDs = [] { Tuple.Create(1,2), … };
IEnumerable<Tuple<int, int>> distinctPairs = propIDs.Distinct();
sizin 'int []' ın tüm iki unsur uzun misiniz nedir? – Rawling
Sipariş önemli mi? '(1,2)' ile aynıdır (2,1) '? –
Int() – TGlatzer