Целочисленный массив в качестве ключа для словаря

Я хочу, чтобы словарь, который использует массив целых чисел в качестве ключей, и если целочисленный массив имеет одинаковое значение (даже другой экземпляр объекта), они будут рассматриваться как один и тот же ключ. Как я должен это делать?

Следующий код не работает, так как 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]; 

One Solution collect form web for “Целочисленный массив в качестве ключа для словаря”

Вы можете создать 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()); 

Примечание: вычисление полученного hash-кода: Каков наилучший алгоритм для переопределенного System.Object.GetHashCode?

  • Как лучше всего обрабатывать динамические многомерные массивы в C / C ++?
  • Как вернуть массив из JNI в Java?
  • c ++ array - выражение должно иметь постоянное значение
  • Как преобразовать stream Java 8 в массив?
  • Как преобразовать массив int в String с помощью метода toString в Java
  • Доступ к массиву доступа за пределами C и C ++
  • Как объявить 2d-массив в C ++ с помощью new?
  • Существуют ли другие распространенные «c-like» или «c-like» языки с ненулевой позицией индекса?
  • Могу ли я передать массив в качестве аргументов метода с переменными аргументами в Java?
  • Почему Collections.sort использует Mergesort, но Arrays.sort нет?
  • определить размер массива, если он передан функции
  • Interesting Posts

    Как передать значение из дочернего элемента обратно в родительскую форму?

    DexIndexOverflowException только при выполнении тестов

    Разница между FragmentPagerAdapter и FragmentStatePagerAdapter

    NSArray слабых ссылок (__unsafe_unretained) для объектов под ARC

    Уместно ли распространять Control для обеспечения неизменно безопасной функции Invoke / BeginInvoke?

    Как я могу получить всю возможную комбинацию подмножества?

    Что делать, когда я замечаю симптомы механических отказов принтера?

    Улучшает ли ReadyBoost производительность?

    Java swing GUI зависает

    Как я могу выровнять меню / значки панели инструментов Android слева, как в приложении «Карты Google»?

    Появление ноутбука Aspire 5741g через несколько минут после загрузки

    Советы по проблеме java.lang.String.replace?

    Вычисление переменной в шаблонах django

    Множественный поиск по нескольким полям по умолчанию

    Как я могу проверить, является ли флэш-накопитель USB фальшивым?

    Давайте будем гением компьютера.