我尝试通过键值从有排序的映射获得值,比较器按值返回nil
。CLOJURE排序映射为现有密钥返回零值
(def tmap {1 {:v 1} 2 {:v 2} 3 {:v 3}})
(def tmap-sorted
(apply sorted-map-by
#(let [val-comp (- (compare
(get-in tmap [%1 :v])
(get-in tmap [%2 :v])))]
(if (= val-comp 0)
1
val-comp))
(flatten (vec tmap))))
; => {3 {:v 3} 2 {:v 2} 1 {:v 1}}
(get tmap-sorted 3)
;=> nil
预计:{:v 3}
实际:nil
我不知道为什么它没有返回预期值的工作,但雅如果你企图达到同样那么还有一个办法。 3) – piyushmandovra
你的比较函数是不对称的,因为'(fxy)= 1'和'(fyx)= 1'当'(get-in tmap [x :v])(get-in tmap [y:v])'是'0'。 – Lee