Funktion auf alle Elemente einer Hashmap anwenden


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 die keys dieser Elemente anwenden. Die Keys sind ausserdem Clojure keywords.

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.

Weitere Artikel

Crossfit Open WOD 17.5

Crossfit Open WOD 17.4

Crossfit Open WOD 17.3

Crossfit Open Workout 17.2

Crossfit Open Workout 17.1

Run Feedbin in your local Kubernetes cluster

Running Threema Web in Docker

Neues Workout Video

Diät Update #1

Workout 21.01.2017