строка хеширования с целым числом 0-19 - PullRequest
1 голос
/ 13 августа 2011

Мне было интересно, как бы я хэшировал строковое значение (например, "myObjectName") в значения int между 0-19 У меня гарантировано не более 20 уникальных строковых значений.

Спасибо

Ответы [ 3 ]

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

Вы можете использовать любой тип хэширования, который вам нравится, но в этом случае вы можете добавить значения ASCII (или кодовую точку Юникода, если хотите) символов и применить к результату модуль 20. Это даст вам число от 0 до 19.

Но это не гарантирует, что в результате число, однозначно идентифицирующее ваши 20 строк. Ни один алгоритм хеширования не гарантирует, что хеширование набора из 20 случайных строк приведет к уникальному коду для каждой строки.

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

Добавление моего комментария в качестве ответа в соответствии с предложением:

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

Один метод будет использовать словарь (например,встроенная структура данных в Python), которая содержит пару ключ-значение вашей строки и число от 1 до 20 (или от 0 до 19)

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

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

Делайте md5 суммируйте, конвертируйте в числа и делайте по модулю 20. Например, в PHP:

hexdec(substr(md5("hello"), 1, 8)) % 20

substr () необходим, чтобы число можно было преобразовать в целое число.

...