首页 > 解决方案 > Clojure 哈希算法

问题描述

我有工作代码,我可以在其中获得数据结构的哈希码,(hash data-structure)但它只适用于少量数据结构。当我有几百万个数据结构时,它会开始给我重复的哈希(冲突)。当数据结构的结构未知时,如何获得更独特的东西?

标签: clojureclojure-java-interop

解决方案


你总是可以求助于 md5 (或其他任何东西,真的)。

(defn md5 [^String s]
    (let [algorithm (MessageDigest/getInstance "MD5")
          raw (.digest algorithm (.getBytes s))]
        (format "%032x" (BigInteger. 1 raw))))

(defn md5-hash [s] (md5 (pr-str s)))

(md5-hash {:a [1 2 3 '(5 6 7)]})

=> "8f941424e629b876cdcb51509521870d"

此外,您可以使用 Java 序列化而不是pr-str.


推荐阅读