clojure - que - play racket
Los mapas de Clojure: ¿están las llaves y los valores en el mismo orden? (2)
Puedo confirmar (oficialmente) que la respuesta a esto es sí. Las cadenas de documentación para keys
y valores se actualizaron en Clojure 1.6 para mencionar esto (consulte http://dev.clojure.org/jira/browse/CLJ-1302 ).
¿Se puede confiar en (= m (zipmap (keys m) (vals m)))
en Clojure 1.3+?
Tener este comportamiento hace que el código sea un poco más legible en algunas situaciones, por ejemplo,
(defn replace-keys [smap m]
(zipmap (replace smap (keys m)) (vals m)))
contra
(defn replace-keys [smap m]
(into {} (for [[k v] m] [(smap k k) v]))
Sí, un montón de clojure se rompería si eso cambiara.
Los mapas se almacenan como árboles y ambas funciones recorren el mismo árbol en el mismo orden.