对于短语来说,这是一个尴尬的问题,但是我说有一组这样的地图:
(def person-1 {:name "Joshua" :birthday {:day 5 :month 12 :year 1960}})
(def person-2 {:name "Louise" :birthday {:day 17 :month 4 :year 1987}})
(def person-3 {:name "Jessica" :birthday {:day 28 :month 5 :year 1972}})
(def people #{person-1 person-2 person-3})
例如,我如何按出生月份对people
进行排序?
我知道如果我想按姓名排序,我可以(sort-by :name people)
,但从语法上来说,我不确定上面的例子是如何工作的。
答案 0 :(得分:2)
尝试:
(sort-by (comp :year :birthday) people)
这取决于这个人的出生年份。
comp
获取一系列函数并将它们组合成一个函数,该函数首先获取参数,首先运行右边的函数,然后获取结果,然后向左进行。
有关详细信息,请参阅comp
in ClojureDocs。
答案 1 :(得分:1)
sort-by将函数作为它的第一个参数,所以你可以这样做:
(sort-by (fn [m] (-> m :birthday :month)) people)
答案 2 :(得分:0)
另一种选择是使用匿名函数:
(sort-by #(:year (:birthday %)) people)
分享并享受。