An integer array as a key for Dictionary An integer array as a key for Dictionary arrays arrays

An integer array as a key for Dictionary


You can create an IEqualityComparer to define how the dictionary should compare items. If the ordering of items is relevant, then something like this should work:

public class MyEqualityComparer : IEqualityComparer<int[]>{    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;    }}

Then pass it in as you create the dictionary:

Dictionary<int[], string> dic    = new Dictionary<int[], string>(new MyEqualityComparer());

Note: calculation of hash code obtained here:What is the best algorithm for an overridden System.Object.GetHashCode?


Maybe you should consider using a Tuple

var myDictionary = new Dictionary<Tuple<int,int>, string>(); myDictionary.Add(new Tuple<int,int>(3, 3), "haha1"); myDictionary.Add(new Tuple<int,int>(5, 5), "haha2"); 

According to MSDN , Tuple objects Equals method will use the values of the two Tuple objects


The easiest way if you don't care about actual hashing may just be to convert the array into a string. Adding a space to avoid numbers joining.

dic.Add(String.Join(" ",a), "haha");