2013-02-10 67 views
3

我有HahSet int [9]数组的集合,并且想知道HashSe是否已经包含该数组。 例如如何实现自己的HashSet包含方法

 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); 

我如何可以覆盖或实现自己的equals方法,使HastSet.Contains会表现得像Arrays.SequenceEquals?

回答

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()); 
2

你必须实现自己的阵列相等比较,如一个上市here

然后它的那样简单询问散列设置为使用比较器:

var set = new HashSet<int[]>(new ArrayEqualityComparer<int>()); 
... 
    // You don't need to do a Contains check; it's implicit. 
set.Add(someArray);