一键式Clojure的不同排序。

问题描述 投票:0回答:1

嘿,我有这个代码,但我想反转只有: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?

clojure clojurescript
1个回答
5
投票
(sort-by (juxt (comp - :a) :b) [{:a 1 :b 3} {:a 1 :b 2} {:a 2 :b 1}])

2
投票

这个问题以及Clojure中有关比较器和排序的相关问题在这篇指导文章中都有介绍。https:/clojure.orgguidescomparators


0
投票

你可以尝试用最后一个线程的宏来进行排序,先用 :b 然后倒序 :a.

(->> [{:a 1 :b 3} {:a 1 :b 2} {:a 2 :b 1}]
     (sort-by :b)
     (sort-by :a #(compare %2 %1)))
© www.soinside.com 2019 - 2024. All rights reserved.