如果计算clojure映射的'pr-str'的CID,是否是唯一的?
我想知道Clojure地图在输入摘要函数时是否可能会有非唯一的哈希值。
这取决于摘要,而不是映射或它来自Clojure的事实,或者你是否使用了pr-str
。
根据定义,任何合理的摘要都是一种有损函数,所以它总是允许冲突,即使某些摘要的冲突概率极小。
在代码中我首先写的是 :one。
但这是否总是比 :two 先出现呢?
哈希集合/映射的顺序是未定义的。但对于同一对象来说,顺序是相同的。
然而,即使内容相同,不同的对象之间的顺序可能也不同
user=> (mapv hash [0 0.])
[0 0]
user=> (pr-str (hash-map 0 0 0. 0))
"{0 0, 0.0 0}"
user=> (pr-str (hash-map 0. 0 0 0))
"{0.0 0, 0 0}"
如果运行上述代码,它是否总是返回一个唯一的值?
根据上述描述,这是没有保障的。对于失真函数如摘要来说,永远不能保证。
我想像clojure映射是与特殊bind
或>>=
操作符相关的集合,它可以使用集合的任一元素返回与此元素绑定的内容。
这似乎与问题无关。但是,在Clojure中,在这方面集合或映射并没有什么特殊之处,Clojure也没有操作符。
Clojure中的集合和映射在许多其他方面都是可调用的——就是那么简单。