我有HahSet int [9]数组的集合,并想知道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);
如何覆盖或实现自己的Equals方法,以便HastSet.Contains的行为类似于Arrays.SequenceEquals?
答案 0 :(得分: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());
答案 1 :(得分:4)
答案 2 :(得分: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);