В 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)])
Есть ли более идиоматическое решение?