在Clojure中分发和合并哈希映射元素

leo*_*bot 1 clojure

什么是最快的方式来转换这个集合:

[[{:a 1} {:a 2} {:a 3}] [{:b 4} {:b 5} {:b 6}] [{:c 7} {:c 8} {:c 9}]]
Run Code Online (Sandbox Code Playgroud)

进入这个系列?:

[{:a 1, :b 4, :c 7} {:a 2, :b 5, :c 8} {:a 3, :b 6, :c 9}]
Run Code Online (Sandbox Code Playgroud)

我想出了这个,但我仍觉得它可能更短:

(map (partial apply merge) 
     (apply map vector collection))
Run Code Online (Sandbox Code Playgroud)

请注意,这些数字是随机选取的,只是为了表明每个val的内容是唯一的......

A. *_*ebb 5

(def data [[{:a 1} {:a 2} {:a 3}] [{:b 4} {:b 5} {:b 6}] [{:c 7} {:c 8} {:c 9}]])

(apply mapv merge data)
;=> [{:a 1, :c 7, :b 4} {:a 2, :c 8, :b 5} {:a 3, :c 9, :b 6}]
Run Code Online (Sandbox Code Playgroud)