我有以下内容,
(let [t (priority-map-by (comparator (fn [[f1 _] [f2 _]]
(< f1 f2)))
:b [8 [2 1]])]
(assoc t :c [8 [2 3]]))
由于某种原因,关联的项目:c在被添加到地图后被修改,我得到的是
{:c [8 [2 1]], :b [8 [2 1]]}
我期待的是,
{:c [8 [2 3]], :b [8 [2 1]]}
我错过了一些明显的原因,为什么项目值被修改了?或者这是一个错误?
答案 0 :(得分:1)
我没有使用比较器得到我想要的东西,并根据cond返回-1 0 1,
(let [t (priority-map-by (fn [x y]
(if (= x y)
0
(let [[f1 _] x
[f2 _] y]
(if (< f1 f2) -1 1))))
:b [8 [2 1]])]
(assoc t :c [8 [2 3]]))
给了我想要的东西,
{:b [8 [2 1]], :c [8 [2 3]]}
答案 1 :(得分:0)
查看priority-map-by
的{{3}},它似乎基于sorted-map-by
,它认为比较相同的键是相同的。例如:
(sorted-map-by (fn [[a] [b]] (< a b)) [1 2] :foo [1 3] :bar)
=> {[1 2] :bar}
这也适用于sorted-set-by
:
(sorted-set-by (fn [[a] [b]] (< a b)) [1 2] [1 3] [3 4])
=> #{[1 2] [3 4]}
这是priority-map-by
的预期行为,你必须问作者。我认为这是合理的。