4

int [9]配列のHahSetコレクションがあり、HashSeにその配列がすでに含まれているかどうかを知りたいです。例えば

       HashSet<int[]> set = new HashSet<int[]>();
       int[] a=new int[9]{1,2,3,4,5,6,7,8,9};
       set.Add(a);
       int[] a2=new int[9]{1,2,3,4,5,6,7,8,9};
       if(!set.Contains(a2))
          set.Add(a2);

HastSet.ContainsがArrays.SequenceEqualsのように動作するように、独自のEqualsメソッドをオーバーライドまたは実装するにはどうすればよいですか?

4

3 に答える 3

5

の実装を提供し、IEqualityComparer<int[]>カスタム比較子を取得するコンストラクターを使用する必要があります。

class MyEqCmpForInt : IEqualityComparer<int[]> {
    public bool Equals(int[] a, int[] b) {
        ...
    }
    public int GetHashCode(int[] data) {
        ...
    }
}

HashSet<int[]> set = new HashSet<int[]>(new MyEqCmpForInt());
于 2013-02-10T15:17:29.567 に答える
4

ハッシュセットクラスには、等式比較子をとるコンストラクターがあります。これを使って。

于 2013-02-10T15:17:13.143 に答える
2

ここにリストされているような、独自の配列等価比較器を実装する必要があります。

そして、比較子を使用するようにハッシュセットに要求するのと同じくらい簡単です。

var set = new HashSet<int[]>(new ArrayEqualityComparer<int>());
...
    // You don't need to do a Contains check; it's implicit.
set.Add(someArray);
于 2013-02-10T15:19:10.817 に答える