Clojure 如何对hashmap中的所有值求和?
在Clojure,我有一张这样的地图:Clojure 如何对hashmap中的所有值求和?,clojure,hashmap,sum,reduce,Clojure,Hashmap,Sum,Reduce,在Clojure,我有一张这样的地图: (def data {:a 1 :b 2 :c 3}) 我想对所有元素求和,得到6。我知道我可能应该使用reduce,但我不知道如何正确地使用它。你是对的,你应该在这里使用reduceVAL将获得您想要相加的值,然后通过加法函数将其减少 user=> (def data {:a 1 :b 2 :c 3}) #'user/data user=> (vals data) (3 2 1) user=> (reduce + (vals data
(def data {:a 1 :b 2 :c 3})
我想对所有元素求和,得到
6
。我知道我可能应该使用reduce
,但我不知道如何正确地使用它。你是对的,你应该在这里使用reduceVAL
将获得您想要相加的值,然后通过加法函数将其减少
user=> (def data {:a 1 :b 2 :c 3})
#'user/data
user=> (vals data)
(3 2 1)
user=> (reduce + (vals data))
6
有两种简单的方法可以做到这一点 使用
reduce
(reduce + (vals data))
或使用应用
(apply + (vals data))
我建议apply
更为惯用,因为
也就是说,如果我们计算(+123)
,结果是6。因此,很自然地会问为什么(+(VAL数据))
是不够的
(VAL数据)
的结果是列表(1 2 3)
<代码>+将此视为单个参数并仅返回该值。。。哎呀
(+ (vals data))
=> (1 2 3)
应用