Un tableau entier comme clé pour Dictionary

Je souhaite avoir le dictionnaire qui utilise un tableau d’entiers comme clés, et si le tableau d’entiers a la même valeur (même une instance d’object différente), ils seront traités comme la même clé. Comment devrais-je le faire?

Le code suivant ne fonctionne pas car b est une instance d’object différente.

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

Vous pouvez créer un IEqualityComparer pour définir la manière dont le dictionnaire doit comparer les éléments. Si la commande des articles est pertinente, alors quelque chose comme ceci devrait fonctionner:

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

Ensuite, transmettez-le lorsque vous créez le dictionnaire:

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

Remarque: calcul du code de hachage obtenu ici: Quel est le meilleur algorithme pour un System.Object.GetHashCode surchargé?