如何在 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 大致相同。
我有以下列表
({: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 大致相同。