Una matriz de enteros como clave para el diccionario

Deseo tener el diccionario que usa una matriz de enteros como claves, y si la matriz entera tiene el mismo valor (incluso una instancia de objeto diferente), se tratarán como la misma clave. ¿Cómo debería hacerlo?

El siguiente código no funciona, ya que b es una instancia de objeto diferente.

  int[] a = new int[] { 1, 2, 3 }; int[] b = new int[] { 1, 2, 3 }; Dictionary dic = new Dictionary(); dic.Add(a, "haha"); string output = dic[b]; 

Puede crear un IEqualityComparer para definir cómo el diccionario debe comparar elementos. Si el orden de los artículos es relevante, entonces algo como esto debería funcionar:

 public class MyEqualityComparer : IEqualityComparer { public bool Equals(int[] x, int[] y) { if (x.Length != y.Length) { return false; } for (int i = 0; i < x.Length; i++) { if (x[i] != y[i]) { return false; } } return true; } public int GetHashCode(int[] obj) { int result = 17; for (int i = 0; i < obj.Length; i++) { unchecked { result = result * 23 + obj[i]; } } return result; } } 

Luego pásalo mientras creas el diccionario:

 Dictionary dic = new Dictionary(new MyEqualityComparer()); 

Nota: cálculo del código hash obtenido aquí: ¿Cuál es el mejor algoritmo para un System.Object.GetHashCode reemplazado?