2012-05-27 8 views
16

¿Está bien confiar en (= m (zipmap (keys m) (vals m))) en Clojure 1.3+?Mapas de Clojure: ¿están las llaves y los vals en el mismo orden?

Tener este comportamiento hace que para el código ligeramente más legible en algunas situaciones, por ejemplo

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

vs

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

En general, no creo que sea una buena idea considerar "posición" en el caso de una estructura de datos de mapa – Ankur

+0

En 2013, ¿se considera esto un detalle de implementación o una promesa? – ToBeReplaced

Respuesta

18

Sí, un montón de clojure se rompería si eso cambió.

Los mapas se almacenan como árboles y ambas funciones caminan en el mismo árbol en el mismo orden.

+0

¿Está documentado esto en algún lugar, o solo un detalle de implementación que podría cambiar? –

+0

Revisa [esta pregunta] (https://groups.google.com/forum/?fromgroups#!topic/clojure/s1sFVF7dAVs) en el grupo de Google de Clojure. Es prácticamente la misma pregunta, incluso hasta la fraseología. –

+0

sí, lo encontré _después_ de la publicación, aunque miré – timc

Cuestiones relacionadas