在Ruby中对哈希数组的值求和

9

我在寻找一种优雅的方法来添加一个哈希数组。

[{:a=>1,:b=>2,:c=>3},{:a=>1,:b=>2,:c=>3},{:a=>1,:b=>2,:c=>3}]

应该返回

[{:a=>3,:b=>6,:c=>9}]

我知道这可能涉及到映射/缩减,但我无法弄清正确的语法,而 ruby-doc 点 org 也没有匹配我的版本。 我正在使用1.8.7。
1个回答

10
array.inject{|x,y| x.merge(y){|_,a,b| a + b}}

(在 Ruby 1.8.7 上经过验证)


1
@Peter,merge函数中作为第一个块参数的下划线是什么作用? - Peter Brown
1
@Beerlington,这只是一个我不想使用的变量。实际上,将其命名为这个是Python的惯例。(传递给块的三个参数是键、x值和y值。) - Peter
1
@Peter 我认为下划线更多是 Haskell 的惯例(来自其模式匹配),也被 Python 所采用... - hurikhan77
@hurikhan77 哦,有趣 - 謝謝。Haskell 已經在計劃中了,我們會在某個時候加入到技能清單中。 - Peter
@Berlington:使用警告运行 Ruby(ruby -w)会警告您未使用的变量,除非它是 _(或在即将推出的 2.0.0 中以 _ 开头)。请参阅 https://dev59.com/S2kw5IYBdhLWcg3w6e0b。 - Marc-André Lafortune
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接