Ich habe eine Sammlung von KartenGruppieren - nach einer Sammlung, die bereits nach Clojure gruppiert ist?
(def a '({:id 9345 :value 3 :type "orange"}
{:id 2945 :value 2 :type "orange"}
{:id 145 :value 3 :type "orange"}
{:id 2745 :value 6 :type "apple"}
{:id 2345 :value 6 :type "apple"}))
ich den ersten von Wert gruppieren mag, nach Art gefolgt.
sollte Meine Ausgabe wie folgt aussehen:
{
:orange [{
:value 3,
:id [9345, 145]
}, {
:value 2,
:id [2935]
}],
:apple [{
:value 6,
:id [2745, 2345]
}]
}
Wie würde ich dies tun in Clojure? Schätze deine Antworten.
Danke!
Edit:
Hier ist, was ich bisher hatte:
(defn by-type-key [data]
(group-by #(get % "type") data))
(reduce-kv
(fn [m k v] (assoc m k (reduce-kv
(fn [sm sk sv] (assoc sm sk (into [] (map #(:id %) sv))))
{}
(group-by :value (map #(dissoc % :type) v)))))
{}
(by-type-key a))
Ausgang:
=> {"orange" {3 [9345 145], 2 [2945]}, "apple" {6 [2745 2345], 3 [125]}}
Ich konnte nicht nur herausfinden, wie weiter verfahren ...
@cfrick meinen ursprünglichen Beitrag Herausgegeben mit dem, was Lösung hatte ich bisher – Bala