如何在 Clojure 中将列表转换为地图

how to convert list to map in 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)))

但是有没有更好的解决方案呢?

另一种方法是使用 merge

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

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

(apply merge a)

其中 a 定义为地图序列,如您的问题。

您也可以使用

(reduce conj a)

这与 Clojure 源代码中的 merge is defined 大致相同。