4

I have HahSet collection of int[9] arrays and want know if HashSe already contains that array. for example

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

How can I override or implement own Equals method so that HastSet.Contains would behave like Arrays.SequenceEquals?

3 Answers 3

5

You need to provide an implementation of IEqualityComparer<int[]>, and use the constructor that takes your custom comparer:

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

HashSet<int[]> set = new HashSet<int[]>(new MyEqCmpForInt());
Sign up to request clarification or add additional context in comments.

Comments

4

The hash set class has a constructor that takes an equality comparer. Use it.

Comments

2

You'll have to implement your own array-equality comparer, such as the one listed here.

And then it's as simple as asking the hash-set to use your comparer:

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.