将长字符串散列到给定范围内的值的快速有效方法

时间:2012-12-01 21:55:50

标签: ruby string hash

将随机字符串(最多1024个字符,它们可以是UTF8)散列为0到100之间的整数值的最有效方法是什么?我认为计算CRC是最快的,但我不确定。

编辑:此哈希的唯一要求是超级快,不要在会话之间更改(相同的数据=>相同的哈希值)

2 个答案:

答案 0 :(得分:5)

尝试以下方法:

"af".sum % 100 # => 99
"ag".sum % 100 # => 0

答案 1 :(得分:3)

使用任何散列函数,将其转换为整数值,然后计算模数为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

我怀疑有一种方法可以直接从摘要中获取整数而不首先通过十六进制,但这是我的头脑。