对 seq 的每个元素应用 reduce
Apply reduce for each element of seq
我有列表集合,我想为集合中的每个列表应用 "reduce +"。我想我应该结合 "apply"、"map" 和 "reduce +",但我不明白如何结合。
例子:
[[1 2 3] [4 5 3] [2 5 1]] => [6 12 8]
不需要apply
。 map
和 reduce
可以正常工作:
(map (partial reduce +) [[1 2 3] [4 5 3] [2 5 1]])
map
将在列表的每个成员上调用该函数,而 partial
只是创建一个需要一个参数的 'curried' 版本的 reduce。也可以写成 #(reduce + %)
或 (fn [lst] (reduce + lst))
更新
您实际上也可以在这里使用 apply 代替 reduce(只是不能同时使用):
(map (partial apply +) [[1 2 3] [4 5 3] [2 5 1]])
进一步更新
如果您有任何性能问题,请参阅@AlexMiller
对此回答的一些重要提示的评论
我有列表集合,我想为集合中的每个列表应用 "reduce +"。我想我应该结合 "apply"、"map" 和 "reduce +",但我不明白如何结合。
例子:
[[1 2 3] [4 5 3] [2 5 1]] => [6 12 8]
不需要apply
。 map
和 reduce
可以正常工作:
(map (partial reduce +) [[1 2 3] [4 5 3] [2 5 1]])
map
将在列表的每个成员上调用该函数,而 partial
只是创建一个需要一个参数的 'curried' 版本的 reduce。也可以写成 #(reduce + %)
或 (fn [lst] (reduce + lst))
更新
您实际上也可以在这里使用 apply 代替 reduce(只是不能同时使用):
(map (partial apply +) [[1 2 3] [4 5 3] [2 5 1]])
进一步更新
如果您有任何性能问题,请参阅@AlexMiller
对此回答的一些重要提示的评论