我有看起来像这样的数据

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

10-12 21:38