【问题标题】:Clojure: summing values in a collection of mapsClojure:对地图集合中的值求和
【发布时间】:2011-12-17 04:38:13
【问题描述】:

我试图通过它们的公共键来总结一组地图的值。我有这个sn-p:

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

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

我现在的问题是如何总结这些值?我尝试使用“减少”,但它只适用于序列,而不适用于集合。

谢谢。

===编辑====

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

(apply merge-with + (for [x data] (select-keys x [:col0 :col1 :col2]))

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

【问题讨论】:

    标签: collections clojure maps sum reduce


    【解决方案1】:

    如果你真的想对公共键的值求和,你可以一步完成整个转换:

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

    总结您拥有的子序列:

    (apply map + '((1 2) (1 2)))
    => (2 4)
    

    【讨论】:

    • 你的合并实现真的很酷。您是否还有关于如何将其应用于特定键的建议?否则当地图有文字时它将不起作用。
    • 你是指数字以外的文字?
    • 是的,但是我想出了一个解决方案,我在第一篇文章中写了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 2019-03-30
    • 2015-12-17
    • 2018-07-31
    相关资源
    最近更新 更多