Zar*_*oth 2 reduce sum clojure hashmap
在Clojure中,我有一张这样的地图:
(def data {:a 1 :b 2 :c 3})
Run Code Online (Sandbox Code Playgroud)
我想总结所有元素并得到6结果.我知道我应该使用reduce,但我不知道如何正确地做到这一点.
mun*_*unk 13
有两种简单的方法可以做到这一点.
同 reduce
(reduce + (vals data))
Run Code Online (Sandbox Code Playgroud)
或者 apply
(apply + (vals data))
Run Code Online (Sandbox Code Playgroud)
我建议这apply更惯用,因为+已经通过reduce实现了.
也就是说,如果我们计算(+ 1 2 3),结果就是6.所以很自然地会问为什么(+ (vals data))还不够.
结果(vals data)是列表(1 2 3).+将此视为单个参数,只返回该值... oops.
(+ (vals data))
=> (1 2 3)
Run Code Online (Sandbox Code Playgroud)
apply 基本上解压缩列表的工作原理.
您是正确的,应该在这里减少。 vals会为您提供您要累加的值,然后将reduce它们加到加法函数上。
user=> (def data {:a 1 :b 2 :c 3})
#'user/data
user=> (vals data)
(3 2 1)
user=> (reduce + (vals data))
6
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
759 次 |
| 最近记录: |