2012-05-27 38 views
16

在Clojure 1.3+中可以依賴 (= m (zipmap (keys m) (vals m))) 嗎?Clojure的地圖:按鍵和vals的順序是?

具有這種行爲使得在某些情況下稍微更可讀的代碼,例如

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

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

一般而言,我認爲在地圖數據結構的情況下考慮「位置」不是一個好主意 – Ankur

+0

2013年,這被認爲是實施細節還是承諾? – ToBeReplaced

回答

18

是,大量的Clojure的如果改變將打破。

地圖以樹的形式存儲,兩個函數按照相同的順序走同一棵樹。

+0

這是任何地方記錄的,或者只是一個可能改變的實現細節? –

+0

在Clojure的Google小組上查看[此問題](https://groups.google.com/forum/?fromgroups#!topic/clojure/s1sFVF7dAV)。這幾乎是一個相同的問題,甚至到措辭。 –

+0

是的,發現它_after_張貼,雖然我看 – timc