Как я должен пойти о реализации Объекта. GetHashCode () для сложного равенства?

Если у вас проблемы с горячими клавишами, попробуйте открыть Key Binding Resolver Window с помощью Cmd +. . Он покажет вам клавиши, которые вы нажимаете в реальном времени.

Например, Cmd + Shift + ' на самом деле является Cmd + "

7
задан Matthew Scharley 2 July 2009 в 01:09
поделиться

2 ответа

Я не думаю, что есть проблема с подходом, который вы выбрали для использования. «Слишком сильное беспокойство» по поводу хеш-коллизий почти всегда указывает на то, что вы слишком сильно обдумываете проблему; до тех пор, пока хеш, скорее всего, будет другим, все будет в порядке.

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

Вы даже можете вообще не учитывать GUID в своей хэш-функции и использовать его только в реализации Equals для устранения неоднозначности маловероятный (?) случай хеш-конфликтов.

5
ответ дан 6 December 2019 в 21:18
поделиться

Очень простой метод хэш-кода для настраиваемых классов - побитовое XOR для каждого хэш-кода полей вместе. Это может быть так просто:

int hash = 0;
hash ^= this.Title.GetHashCode();
hash ^= this.PublishDate.GetHashCode();
hash ^= this.Description.GetHashCode();
return hash;

Из ссылки выше :

XOR имеет следующие приятные свойства:

  • Он не зависит от порядка вычислений.
  • Он не «Пустые» биты. Если вы измените хотя бы один бит в одном из компонентов, окончательное значение изменится.
  • Это быстро, один цикл даже на самом примитивном компьютере.
  • Он сохраняет равномерное распределение. Если две части, которые вы объединяете, равномерно распределены, то и комбинация будет. Другими словами, он не стремится сжимать диапазон дайджеста в более узкую полосу.

XOR не работает хорошо, если вы ожидаете, что в ваших полях будут повторяющиеся значения, поскольку повторяющиеся значения будут уравновешивать друг друга при выполнении XOR.

7
ответ дан 6 December 2019 в 21:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: