按一个键进行不同排序Clojure

按一个键进行不同排序Clojure,clojure,Clojure,嘿,我有这个代码,但我只想反转:a键 (sort-by (juxt :a :b) [{:a 1 :b 3} {:a 1 :b 2} {:a 2 :b 1}]) ;;=> [{:a 1 :b 2} {:a 1 :b 3} {:a 2 :b 1}] 我试过了,但顺序不对 (sort-by (juxt :a :b) #(compare %2 %1) [{:a 1 :b 3} {:a 1 :b 2} {:a 2 :b 1}]) ;;=> ({:a 2, :b 1} {:a 1, :b 3

嘿,我有这个代码,但我只想反转:a键

(sort-by (juxt :a :b) [{:a 1 :b 3} {:a 1 :b 2} {:a 2 :b 1}])
;;=> [{:a 1 :b 2} {:a 1 :b 3} {:a 2 :b 1}]
我试过了,但顺序不对

(sort-by (juxt :a :b) #(compare %2 %1)  [{:a 1 :b 3} {:a 1 :b 2} {:a 2 :b 1}])
;;=> ({:a 2, :b 1} {:a 1, :b 3} {:a 1, :b 2})
我想买一个

;;=> ({:a 2, :b 1} {:a 1, :b 2} {:a 1, :b 3})
有什么想法吗?
我可以在juxt中也这样做吗?

您可以尝试使用线程最后一个宏先按:b排序,然后按:a反向排序

(sort-by (juxt (comp - :a) :b) [{:a 1 :b 3} {:a 1 :b 2} {:a 2 :b 1}])

您可以尝试使用线程最后一个宏先按:b排序,然后按:a反向排序


关于Clojure中比较器和排序的这一问题及相关问题在本指南文章中有介绍:

关于Clojure中比较器和排序的这一问题及相关问题在本指南文章中有介绍:

(->> [{:a 1 :b 3} {:a 1 :b 2} {:a 2 :b 1}]
     (sort-by :b)
     (sort-by :a #(compare %2 %1)))