Clojure 如何对hashmap中的所有值求和?

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

在Clojure,我有一张这样的地图:

(def data {:a 1 :b 2 :c 3})

我想对所有元素求和,得到
6
。我知道我可能应该使用
reduce
,但我不知道如何正确地使用它。

你是对的,你应该在这里使用reduce
VAL
将获得您想要相加的值,然后通过加法函数将其减少

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)
应用