簡體   English   中英

Clojure:匯總地圖集合中的值

[英]Clojure: summing values in a collection of maps

我試圖通過它們的公共密鑰來匯總一組地圖的值。 我有這個片段:

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

基本上,我有一張地圖清單。 然后我執行一個理解列表,只采取我需要的鍵。

我現在的問題是,我現在如何總結這些價值觀? 我嘗試使用“reduce”但它只適用於序列,而不是集合。

謝謝。

===編輯====

使用Joost的建議我得出了這個:

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

這將迭代一個集合並對所選鍵進行求和。 我添加的“選擇鍵”部分尤其需要避免在集合中的地圖包含文字而不僅僅是數字時遇到麻煩。

如果您真的想要對公共密鑰的值求和,則可以一步完成整個轉換:

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

要總結您擁有的子序列:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM