В 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)])
Есть более идиоматические решения?
имя переменной в вашем предлагаемое решение вводит в заблуждение. Значение, разрушенное как «плод», на самом деле представляет собой последовательность векторов пары момент-плод. –
Спасибо большое! Обновлен вопрос – viebel