我有看起来像这样的数据
(def a [{:firmAccount "MSFT" :Val 10 :PE 3 }
{:firmAccount "MSFT" :Val 15 :PE 4}
{:firmAccount "GOG" :Val 15 :PE 3}
{:firmAccount "YAH" :Val 8 :PE 1}])
我想按:firmAccount分组,然后将每个公司帐户的:Val和:PE相加,得到类似
[{:firmAccount "MSFT" :Val 25 :PE 7}
{:firmAccount "GOG" :Val 15 :PE 3}
{:FirmAccount "YAH" :Val 8 :PE 1}]
这确实是一件微不足道的事情,在SQL中,我什至不会三思而后行,但由于我正在学习Clojure,请多多包涵
最佳答案
Clojure.core具有内置的分组依据功能。由于 map 中同时存在文本和int val,因此解决方案变得有些难看。
(for [m (group-by :firmAccount a)]
(assoc (apply merge-with + (map #(dissoc % :firmAccount) (val m)))
:firmAccount (key m)))
关于clojure - GROUP BY和 map 向量上的汇总-Clojure,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7203827/