Funktion auf alle Elemente einer Hashmap anwenden
Von Carsten
Ich habe einige Zeit gebraucht, bis ich das folgende Problem in Clojure lösen konnte:
Ich habe eine
map
mit einigen key-value-Paaren und möchte eine Funktion auf diekeys
dieser Elemente anwenden. Die Keys sind ausserdem Clojurekeywords
.
Heute bin ich dann auf die Lösung gekommen, mein Dank gilt wie so oft Stackoverflow.com.
;; map anlegen
(def m {:foo 'foo, :bar 'bar, :baz 'baz})
;; zipmap erstellt eine neue map aus einer 2 Listen mit Keys und Values
(zipmap (map #(str"key=" %) (keys m)) (vals m))
;; => {"key=:baz" baz,"key=:bar" bar,"key=:foo" foo}
Nochmal auf Deutsch: Zeile 4 erstellt mit der Funktion zipmap
eine neue map
aus der Liste der Keys und Values aus meiner map m
.
Wer das jetzt nochmal Schritt für Schritt nachvollziehen will, der kann diese Befehle in die REPL kopieren:
;; Funktion zipmap mit 2 Listen aufrufen
(zipmap [:foo :bar :baz] ['foo 'bar 'baz])
;; => {:baz baz, :bar bar, :foo foo}
Das ist im Prinzip identisch zu meinem Aufruf, nur dass ich mit (keys m)
und (vals m)
die Listen aus meiner bereits existierenden map
erstelle.
Meine Beispiele könnt ihr meistens kopieren und in eine REPL einfügen. Ich hab alles, was Fehler verursachen kann, mit Kommentaren versehen.