【问题标题】:how to convert list to map in clojure如何在clojure中将列表转换为地图
【发布时间】:2025-12-24 09:35:11
【问题描述】:

我有以下列表

({: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)))

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

【问题讨论】:

    标签: clojure


    【解决方案1】:

    另一种方法是使用merge

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

    【讨论】:

      【解决方案2】:

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

      (apply merge a)
      

      a 被定义为一系列地图,就像你的问题一样。

      你也可以使用

      (reduce conj a)
      

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

      【讨论】: