0
using System.Linq;

var a = new byte?[][,]{
    new byte?[,]{{1}},
    new byte?[,]{{1}},
    new byte?[,]{{2}},
    new byte?[,]{{1, 2, 3}, {4, 5, 6}}};
a = a.Distinct().ToArray();

ただし、「a」にはまだ重複が含まれています。私はこれを正しくやっていますか?


ありがとう。回答の情報から。

class Nullable_Byte_2D_Array_EqualityComparer : IEqualityComparer<byte?[,]>
{
    public bool Equals(byte?[,] a, byte?[,] b)
    {
        var r = a.GetLength(0) == b.GetLength(0) &&
            a.GetLength(1) == b.GetLength(1);
        if (r)
        {
            var v = new byte?[a.Length];
            byte n = 0;
            foreach (byte? c in a)
            {
                v[n] = c;
                n++;
            }
            n = 0;
            foreach (byte? c in b)
            {
                if (c != v[n])
                    r = false;
                n++;
            }
        }
        return r;
    }
}

a = a.Distinct(new Nullable_Byte_2D_Array_EqualityComparer()).ToArray();
4

1 に答える 1

13

重複は含まれていません。内部に同じ値を持つ 2 つの異なる配列が含まれています。配列は参照型でDistinct()あるため、デフォルトで参照比較を行います。この動作を変更するには、このオーバーライドを使用して独自の比較子を指定します。

于 2012-07-30T20:34:29.303 に答える