clojure - GROUP BY和 map 向量上的汇总-Clojure

标签 clojure

我有看起来像这样的数据

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

相关文章:

scala - Scala 是否有相当于 Haskell 的 CHP?

java - Clojure java.lang.Exception 错误 : transaction rolled back: d ! = clojure.lang.Keyword (NO_SOURCE_FILE:0)

clojure - Clojure 中的参数重载

clojure - REPL 中的方法签名

testing - Clojure - 如何在实现中检测另一个协议(protocol)

java - 一种从 Clojure 中的 java.io.File.listFiles 中剥离返回值的方法

clojure - 如何在Clojure中制作一个无限的重复序列?

java - 在 clojure 中提取并写入函数的执行时间

clojure cons vs conj with lazy-seq

clojure - 如何编写惯用的 clojure(+ 函数式)代码?