В Clojure как группировать элементы?

В clojure я хочу агрегировать эти данные:

(def data [[:morning :pear][:morning :mango][:evening :mango][:evening :pear]])
(group-by first data)
;{:morning [[:morning :pear][:morning :mango]],:evening [[:evening :mango][:evening :pear]]}

Моя проблема в том, что :evening и :morning являются избыточными. Вместо этого я хотел бы создать следующую коллекцию:

([:morning (:pear :mango)] [:evening (:mango :pear)])

Я придумал:

(for [[moment moment-fruit-vec] (group-by first data)] [moment (map second moment-fruit-vec)])

Есть ли более идиоматическое решение?

10
задан Stéphane Bruckert 27 January 2016 в 12:57
поделиться