2012-05-27 7 views
16

Ist es in Ordnung, sich in Clojure 1.3+ auf (= m (zipmap (keys m) (vals m))) zu verlassen?Clojures Karten: Sind Schlüssel und Werte in der gleichen Reihenfolge?

Nachdem dieses Verhalten für leicht lesbaren Code in einigen Situationen macht, zB

(defn replace-keys [smap m] 
    (zipmap (replace smap (keys m)) (vals m))) 

gegen

(defn replace-keys [smap m] 
    (into {} (for [[k v] m] [(smap k k) v])) 
+1

Im Allgemeinen halte ich es nicht für eine gute Idee, "Position" im Falle einer Kartendatenstruktur zu betrachten – Ankur

+0

Wird dies 2013 als Implementierungsdetail oder als Versprechen betrachtet? – ToBeReplaced

Antwort

18

Ja, viele clojure brechen würde, wenn das geändert.

Karten werden als Bäume gespeichert und beide Funktionen laufen in der gleichen Reihenfolge im selben Baum.

+0

Wird dies irgendwo dokumentiert, oder nur ein Implementierungsdetail, das sich ändern könnte? –

+0

Sehen Sie sich [diese Frage] (https://groups.google.com/forum/?fromgroups#!topic/clojure/s1sFVF7dAVs) in der Google-Gruppe von Clojure an. Es ist praktisch die gleiche Frage, sogar bis zum Wortlaut. –

+0

ja, fand es nach dem Posting, obwohl ich schaute – timc

Verwandte Themen