Clojure:汇总地图集合中的值

kfk*_*kfk 4 collections reduce maps sum clojure

我试图通过它们的公共密钥来汇总一组地图的值.我有这个片段:

(def data [{:a 1 :b 2 :c 3} {:a 1 :b 2 :c 3}]
(for [xs data] (map xs [:a :b]))
((1 2) (1 2))

Final result should be ==> (2 4)
Run Code Online (Sandbox Code Playgroud)

基本上,我有一张地图清单.然后我执行一个理解列表,只采取我需要的键.

我现在的问题是,我现在如何总结这些价值观?我尝试使用"reduce"但它只适用于序列,而不是集合.

谢谢.

===编辑====

使用Joost的建议我得出了这个:

(apply merge-with + (for [x data] (select-keys x [:col0 :col1 :col2]))
Run Code Online (Sandbox Code Playgroud)

这将迭代一个集合并对所选键进行求和.我添加的"选择键"部分尤其需要避免在集合中的地图包含文字而不仅仅是数字时遇到麻烦.

Joo*_*aat 11

如果您真的想要对公共密钥的值求和,则可以一步完成整个转换:

(apply merge-with + data)
=> {:a 2, :b 4, :c 6}
Run Code Online (Sandbox Code Playgroud)

要总结您拥有的子序列:

(apply map + '((1 2) (1 2)))
=> (2 4)
Run Code Online (Sandbox Code Playgroud)