如何将列表转换为clojure中的映射

时间:2015-01-24 08:24:11

标签: clojure

我有以下列表

({:Col1 {:type varchar :nullable true}} {:Col2 {:type varchar :nullable true}} {:Col3 {:type varchar :nullable false}})

并希望转换为以下内容

{:Col3 {:type varchar, :nullable false}, :Col1 {:type varchar, :nullable true}, Col2 {:type varchar, :nullable true}}

我正在使用以下代码。

(def a '({:Col1 {:type varchar :nullable true}} {:Col2 {:type varchar :nullable true}} {:Col3 {:type varchar :nullable false}}))

 (apply hash-map (flatten (map (comp flatten seq) a)))

但是有更好的解决方案吗?

2 个答案:

答案 0 :(得分:3)

另一种方法是使用merge

(reduce merge
        '({:Col1 {:type varchar :nullable true}} {:Col2 {:type varchar :nullable true}} {:Col3 {:type varchar :nullable false}}))

答案 1 :(得分:0)

除了Symfrog的回答,这个选项同样简短,但可能更容易理解:

(apply merge a)

其中a被定义为一系列地图,如您的问题所示。

您也可以使用

(reduce conj a)

大致是Clojure来源中的merge is defined