我想比较一份参考文件的两个副本,看看它们是否已经改变。如何获得地图的sha1和任何子叶?
答案 0 :(得分:2)
根据您想要做的事情,您可能会发现通过“hash”函数使用普通的Java hashCode()比尝试使用SHA更简单:
(hash {:a "hoho" :b "hehe"})
=> 2025831869
(hash {:a "hoho" :b "hihi"})
=> 2025836181
在大多数情况下,这足以确定两张地图是否不同。
请注意,当两个对象具有相同的哈希值时,SHA或任何其他哈希码都不保证相等 - 许多对象可能具有相同的哈希值。因此,如果散列相同,您仍然需要检查两个对象的值是否相等
另外,请注意计算哈希值比使用=的简单比较更昂贵。因此,如果您能够存储哈希值并将其重新用于许多比较,那么使用哈希技术才有意义。
答案 1 :(得分:1)
你确定你真的想要那些低级别的东西吗? clojure中的身份,至少是wrt值,有点内置:
user> (= {:a 1, :b {:c 2}} (hash-map :b {:c 2} :a 1))
true