当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何对hashmap中的所有值求和?》经验,为你挑选了2个好方法。

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

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

我想总结所有元素并得到6结果.我知道我应该使用reduce,但我不知道如何正确地做到这一点.



1> munk..:

有两种简单的方法可以做到这一点.

reduce

(reduce + (vals data))

或者 apply

(apply + (vals data))

它们对于关联函数是等价的.

我建议这apply更惯用,因为+已经通过reduce实现了.

也就是说,如果我们计算(+ 1 2 3),结果就是6.所以很自然地会问为什么(+ (vals data))还不够.

结果(vals data)是列表(1 2 3).+将此视为单个参数,只返回该值... oops.

(+ (vals data))
=> (1 2 3)

apply 基本上解压缩列表的工作原理.



2> jmargolisvt..:

您是正确的,应该在这里减少。 vals会为您提供您要累加的值,然后将reduce它们加到加法函数上。

user=> (def data {:a 1 :b 2 :c 3})
#'user/data
user=> (vals data)
(3 2 1)
user=> (reduce + (vals data)) 
6

推荐阅读
TXCWB_523
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有