2013-07-20 6 views
6

Ich bin sicher, das ist einfach, aber ich vermute, dass ich eine Menge kleiner Fragen auf dem Weg zu idomatic clojure haben werde. Vielleicht habe ich etwas übersehen, aber wenn ich auf die Clojure-Kartenseite schaute, fand ich keine Lösung.Erstellen Sie eine Karte, wenn Sie einen Vektor von Schlüsseln und Werten haben

Gegeben zwei Vektoren (einer der Schlüssel anderer Werte) Wie können Sie effizient (Stichwort!) Eine Karte von Schlüssel zu Wert erstellen?

Die Schlüssel und Werte sind unten:

(:year :month :day) (core/split "2013-02-18" #"-") 

Antwort

16

Die natürliche Lösung ist zipmap zu verwenden:

(zipmap [:year :month :day] (clojure.string/split "2013-02-18" #"-")) 
;= {:day "18", :month "02", :year "2013"} 

Für eine kleine Karte wie diese es eigentlich ziemlich effizient ist. Für eine größere Karte möchten Sie zipmap transienten verwenden, was es derzeit nicht tut. Dafür gibt es ein Ticket in JIRA, mit meinem Patch: CLJ-1005.

Natürlich ist es einfach genug, die Transienten-fähigen zipmap in der eigenen Codebasis zu verwenden und sie gegenüber der in clojure.core zu verwenden. Dies ist eine ziemlich wichtige Sache zu tun, wenn Sie größere Karten zippen.

Der Code kann aus dem Patch oder aus der ClojureScript-Kernbibliothek kopiert werden, die Transienten in ihrem zipmap verwendet; hier ein Link zum ClojureScript source ab Release 1844 (diese spezielle Funktion kann in Clojure ohne Änderungen verwendet werden).

+0

Große Antwort danke. Clojure ist bis jetzt eine Explosion, ich fühle mich von den Visionen der OO Programmierung befreit ... – Core

Verwandte Themen