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

sav*_*ior 3 clojure

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

(def templates {:list1 {:create_time "create_time"
                        :recharge_amount "recharge"
                        :invest_amount "invest"
                        ;; something else
                        }
                :list2 {:create_time "ct"
                         ;; something else
                        }
                ;;something else 
                })
Run Code Online (Sandbox Code Playgroud)

我希望地图按照我定义的顺序排列。怎么解决呢?

xsc*_*xsc 5

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

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

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

(keys templates)
;; => (:list1 :list2 :list3)
Run Code Online (Sandbox Code Playgroud)

您问为什么要用恒定数据约束?好吧,数组映射基本上可以在任何修改操作之后变成哈希映射(如果其内容变得太大而无法提供有效的查找)。

或者,如果您愿意接受外部依赖关系,则可以查看合金/有序合金是否符合您的需求。