Является ли GetHashCode достаточно сильным или мне нужна другая хеш-функция? - PullRequest
1 голос
/ 12 августа 2011

Я осуществляю сериализацию данных, и у меня возникла проблема. Я получил:

  • 4-байтовые поля:
    • Диапазон значений 0-255
    • Диапазон значений 0-4
    • Диапазон значений 0-255
    • Диапазон значений 0-100
  • и 1 int (только положительные значения)

У меня есть идея преобразовать все в массив байтов (длина 8) или массив int (длина 2) и получить метод C # GetHashCode

Достаточно ли сильный GetHashCode для использования в качестве идентификатора этих данных? Или, может быть, у кого-то есть идея получше?

EOG

Ответы [ 3 ]

3 голосов
/ 12 августа 2011

GetHashCode не предназначен для создания уникального идентификатора - его основное назначение - присвоение значений сегментам в хешированных структурах данных (например, HashTable) - см. http://ericlippert.com/2011/02/28/guidelines-and-rules-for-gethashcode/. Когда мне нужен уникальный идентификатор для объекта по какой-то причине сам объект этого не предоставляет, я обычно просто использую GUID. Они тривиальны для генерации в C # и гарантированно уникальны в рамках всего, что вы делаете.

1 голос
/ 12 августа 2011

GetHashCode предназначен исключительно для хеширования в словаре. Вы не должны нигде использовать его в качестве идентификатора из-за возможных коллизий хешей . Он возвращает Int32 и, например, для String можно иметь более 2 147 483 647 уникальных строк. Две разные строки могут иметь одинаковый хэш-код. Сказав, что у вас есть два варианта:

1) Если вам нужно, чтобы ваш идентификатор был получен из фактических значений. Например, если вам нужно быстро определить, сохранился ли новый объект, не десериализовав все объекты и не сравнив их с рассматриваемым объектом. Вы можете использовать ComputeHash на SHA1, например.

2) Если вам не нужно, чтобы идентификатор был получен из фактических значений, вы можете просто сгенерировать Guid как bbogovich .

0 голосов
/ 12 августа 2011

Значение GetHashCode() для целых и длинных значений (

Почему бы не преобразовать всю структуру в long как использовать это?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...