どのようにしてhaskellで文字列をハッシュして、多かれ少なかれ一意のハッシュ値を得ることができます。たとえば、各文字列に固有の整数を作成しますか?
hash:: String -> Integer
>hash "foo"
1234123412
>hash "bar"
5938454
これらの行に沿ったものはありますか?私はhaskellのハッシュに精通していないので、どんな助けもありがとう!ありがとう。
どのようにしてhaskellで文字列をハッシュして、多かれ少なかれ一意のハッシュ値を得ることができます。たとえば、各文字列に固有の整数を作成しますか?
hash:: String -> Integer
>hash "foo"
1234123412
>hash "bar"
5938454
これらの行に沿ったものはありますか?私はhaskellのハッシュに精通していないので、どんな助けもありがとう!ありがとう。
Hackageのhashableパッケージを使用できます。これは、文字列を含む標準タイプの数、のためにハッシュ関数を提供します。
Prelude Data.Hashable> hash "foo"
653367
Prelude Data.Hashable> hash "bar"
649056
あなた自身を実装する場合は、ハッシュ関数は、通常は倍として表現するのは簡単です。これらのハッシュ関数は、シンプルかつ高速であることを意味していることを
hash :: String -> Int
hash = foldl' (\h c -> 33*h `xor` fromEnum c) 5381
注:たとえば、ここでDJB2ハッシュのバリアントです。もっと複雑なハッシュ関数を探しているなら、cryptohashパッケージで選択項目を見つけることができます。
文字列をベースmaxBound :: Charの数値として扱います。 – augustss