Gegeben eine Datenstruktur, ich möchte es neu strukturieren, um von einem der verschachtelten Werte gruppiert werden. Diese Werte sind Vektoren, und wenn ich auf mehr als einen Wert stoße, bleibe ich stecken.Clojure/Clojurescript: group-by eine Karte auf mehrere Werte
einen Vektor von Karten wie folgt gegeben:
(def tools
[{:name "A",
:config
{:accepts ["id"],
:classes ["X"]}}
{:name "B",
:config
{:accepts ["id"],
:classes ["X", "Y"]
}}])
Ich kann fast bekommen, was ich will - die von „Klassen“ sortierten Werte als Schlüssel, wiederholt mit Werten wenn nötig - durch group-by
läuft :
(group-by #(get-in % [:config :classes]) tools)
Aber es dauert den ganzen Vektor in :classes
als Schlüssel.
{["X"] [{:name "A",
:config {:accepts ["id"],
:classes ["X"]}}],
["X" "Y"] [{:name "B",
:config {:accepts ["id"],
:classes ["X" "Y"]}}]}
Was ich wirklich will pro Klasse die Werte einmal zu kopieren, wie folgt aussehen:
{"X" [{:name "A"
:config {:accepts ["id"]
:classes ["X"]}}
{:name "B"
:config {:accepts ["id"]
:classes ["X" "Y"]}}]
"Y" [{:name "B"
:config {:accepts ["id"]
:classes ["X" "Y"]}}]}
Ich bin nicht ganz sicher, wie dies gegeben zu handhaben, dass ich mehrere Werte in classes
haben .
Arbeiten repl Demo: https://repl.it/@YoYehudi/FamiliarDisguisedXiphiasgladius
Nice! Dies ist auch _much_ schneller als die 'reduce'-Version. –