整数数组作为Dictionary的键

我希望使用整数数组作为键的字典,如果整数数组具有相同的值(甚至是不同的对象实例),它们将被视为相同的键。 我该怎么办?

以下代码不起作用,因为b是不同的对象实例。

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

您可以创建IEqualityComparer来定义字典应如何比较项目。 如果项目的顺序是相关的,那么这样的事情应该有效:

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

然后在创建字典时传入它:

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

注意:计算这里获得的哈希码: 重写的System.Object.GetHashCode的最佳算法是什么?