2012-05-27 24 views
16

Bạn có muốn dựa vào (= m (zipmap (keys m) (vals m))) trong Clojure 1.3+ không?Bản đồ của Clojure: là các khóa và vals theo thứ tự như nhau?

Có hành vi này làm cho mã hơi dễ đọc hơn trong một số trường hợp, ví dụ như

(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

Nói chung tôi không nghĩ một ý tưởng hay là xem xét "vị trí" trong trường hợp cấu trúc dữ liệu bản đồ – Ankur

+0

Năm 2013, đây có phải là chi tiết triển khai hay lời hứa? – ToBeReplaced

Trả lời

8

Tôi có thể xác nhận (chính thức) rằng câu trả lời cho điều này là có. Các tài liệu cho keysvals đã được cập nhật trong Clojure 1.6 đề cập đến điều này (xem http://dev.clojure.org/jira/browse/CLJ-1302).

18

Vâng, rất nhiều clojure sẽ phá vỡ nếu điều đó đã thay đổi.

Bản đồ được lưu trữ dưới dạng cây và cả hai chức năng đều đi cùng một cây theo cùng thứ tự.

+0

Tài liệu này có được ghi ở bất cứ đâu hoặc chỉ chi tiết triển khai có thể thay đổi? –

+0

Khám phá [câu hỏi này] (https://groups.google.com/forum/?fromgroups#!topic/clojure/s1sFVF7dAVs) tại nhóm Google của Clojure. Đó là thực tế là câu hỏi giống hệt nhau, thậm chí xuống đến từ ngữ. –

+0

có, đã tìm thấy nó sau khi đăng, mặc dù tôi đã xem – timc

Các vấn đề liên quan