整数数组作为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的最佳算法是什么?