ランダムな文字列 (最大 1024 文字、UTF8 にすることができます) を 0 から 100 の整数値にハッシュする最も効率的な方法は何ですか? CRCを計算するのが最速だと思いますが、よくわかりません。
編集: このハッシュの唯一の要件は、超高速であることと、セッション間で変更しないことです (同じデータ => 同じハッシュ値)
次のことを試してください。
"af".sum % 100 # => 99
"ag".sum % 100 # => 0
任意のハッシュ関数を使用し、それを整数値に変換してから、100 のモジュラスを計算します。
MD5 を使用した例:
require 'digest/md5'
def hash_100(str)
Digest::MD5.hexdigest(str).to_i(16) % 100
end
hash_100('hello') # => 94
hash_100('world') # => 51
最初に 16 進数を経由せずにダイジェストから直接整数を取得する方法があると思いますが、これは私の頭の上にありました。