如果我计算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中的集合和映射可以在其他方面调用,就是这样。