4
マップのコレクションの値を共通キーで集計しようとしています。私はこのスニペットを持っています: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)
基本的に私はマップのリストを持っています。それから私は必要なキーだけを取るための理解のリストを実行します。
ここで私の質問は、どうすればこれらの値を合計できますか?私は "reduce"を使用しようとしましたが、コレクション全体ではなく、シーケンス全体でしか動作しません。
ありがとうございました。
===ヨーストからの提案を使用して編集する====
私はこれで出てきた:
(apply merge-with + (for [x data] (select-keys x [:col0 :col1 :col2]))
これは、選択したキーのコレクションと合計を反復します。私が追加した「選択キー」の部分は、特に、コレクション内のマップに数字だけでなくリテラルが含まれている場合に問題になるのを避けるために必要です。
実装と:
あなたが持っているサブシーケンスを合計しますmerge-withは本当にクールです。これを特定のキーに適用する方法についての提案もありますか?それ以外の場合は、マップにリテラルがある場合は機能しません。 – kfk
あなたは数字以外のリテラルを意味しますか? –
はい、私は解決策を思いついたと思います。私は最初の投稿でそれを書いています。 – kfk