如何在haskell中散列字符串以获得或多或少的唯一散列值。例如:
hash:: String -> Integer
>hash "foo"
1234123412
>hash "bar"
5938454
或者沿着这些方向做些什么?我不熟悉haskell中的哈希,所以任何帮助都将不胜感激!感谢。
答案 0 :(得分:7)
您可以使用Hackage中的hashable包。它为许多标准类型提供哈希函数,包括字符串:
Prelude Data.Hashable> hash "foo"
653367
Prelude Data.Hashable> hash "bar"
649056
如果你想实现自己的,哈希函数通常很容易表达为折叠。例如,这是DJB2哈希的变体:
hash :: String -> Int
hash = foldl' (\h c -> 33*h `xor` fromEnum c) 5381
请注意,这些哈希函数意味着简单快速。如果您正在寻找更复杂的哈希函数,可以在cryptohash包中找到一个选项。