2014-11-16 25 views
1

我在代碼中定義的地圖,如:如何在Clojure中保持地圖順序?

(def templates {:list1 {:create_time "create_time" 
         :recharge_amount "recharge" 
         :invest_amount "invest" 
         ;; something else 
         } 
       :list2 {:create_time "ct" 
         ;; something else 
         } 
       ;;something else 
       }) 

我希望地圖備存我定義什麼順序。 如何解決它?

+0

使用有排序的地圖(參見'sorted-map')。 –

+0

@DiegoBash'sorted-map'不會維護插入順序(當然,除非按排序順序插入鍵)。 – xsc

+0

您可以保留鍵的並行向量,如插入。在這裏,'(def template-log [:list1:list2])'。 – Thumbnail

回答

1

如果你的數據不會改變,你可以使用array-map

(def templates 
    (array-map 
    :list1 {} 
    :list2 {} 
    :list3 {})) 

(seq templates) 
;; => ([:list1 {}] [:list2 {}] [:list3 {}]) 

(keys templates) 
;; => (:list1 :list2 :list3) 

爲什麼用一個常量數據約束,你問?那麼,基本上任何修改操作(如果其內容變得太大而無法提供高效查找),數組映射可能會變成散列映射。

或者,如果您打開外部依賴關係,則可以看到amalloy/ordered是否適合您的需求。