Like an int [] hash in C #

I am trying to come up with a way to override GetHashCode () when called from Vector2 []. This code creates unique hashes for objects that I know are equal: I pass the next class to the same rectangle, and different hashes are generated.

public Shape(Rectangle r) { edges = new Vector2[4]; edges[0] = new Vector2(0, 0); edges[1] = new Vector2(r.Width, 0); edges[2] = new Vector2(r.Width, r.Height); edges[3] = new Vector2(0, r.Height); Console.Write(edges.GetHashCode() + "\n"); Position = new Vector2(rX, rY); } 

The Vector2 array is just a collection of int functions. How to create a unique hash for an ints list?

+7
source share
1 answer

You can use something like this:

 public static int CombineHashCodes(params int[] hashCodes) { if (hashCodes == null) { throw new ArgumentNullException("hashCodes"); } if (hashCodes.Length == 0) { throw new IndexOutOfRangeException(); } if (hashCodes.Length == 1) { return hashCodes[0]; } var result = hashCodes[0]; for (var i = 1; i < hashCodes.Length; i++) { result = CombineHashCodes(result, hashCodes[i]); } return result; } private static int CombineHashCodes(int h1, int h2) { return (h1 << 5) + h1 ^ h2; // another implementation //unchecked //{ // var hash = 17; // hash = hash * 23 + h1; // hash = hash * 23 + h2; // return hash; //} } 
+4
source

All Articles