如何在Clojure中保持地图顺序?

时间:2014-11-16 05:42:11

标签: clojure

我在代码中定义了一个地图,如:

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

我希望地图按照我定义的顺序保持顺序。 怎么解决?

1 个答案:

答案 0 :(得分:5)

如果您的数据无法更改,则可以使用array-map

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

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

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

为什么要求具有常量数据的约束?好吧,在基本上任何修改操作之后,数组映射可能会变成哈希映射(如果它的内容变得太大而无法提供有效的查找)。

或者,如果您对外部依赖项开放,则可以看到amalloy/ordered是否符合您的需求。