【发布时间】:2011-10-23 05:18:03
【问题描述】:
嗨,伙计们:我想为地图中的所有值绘制一个“平均值”。说我有一张地图清单:
[{"age" 2 "height" 1 "weight" 10},
{"age" 4 "height" 4 "weight" 20},
{"age" 7 "height" 11 "weight" 40}]
我想要的输出是
{"age 5 "height" 5 ....}
///下面是我脑子里乱七八糟的东西,即我想象的在 Clojure 中工作的方式......不要太认真
转置列表:
{"age" [2 4 7] "height" [1 4 11] }
然后我可以简单地做一些类似的事情(再次,在这里组成一个名为 freduce 的函数)
(freduce average (vals (map key-join list)))
得到
{"age" 5 "weight" 10 "height" 7}
【问题讨论】:
-
您将要减少,这样您就不必遍历序列两次。您将从一个空映射开始作为您的累加器,当您的 reduce 到达每个映射时,将所有值与累加器中的相应值相加。在列表的最后一个元素上,将每个值除以列表的长度。
-
我实际上想对数据做更复杂的数学运算(标准差,...),所以我想我想将数据合并的方式与转置的方式解耦。
标签: list map clojure transpose