【问题标题】:Summing the values of an array of hashes in Ruby在 Ruby 中对哈希数组的值求和
【发布时间】:2010-02-21 06:48:18
【问题描述】:

我无法找出添加哈希数组的优雅方法

[{: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 dot org 与我的版本不匹配

我使用的是 1.8.7

【问题讨论】:

    标签: ruby


    【解决方案1】:
    array.inject{|x,y| x.merge(y){|_,a,b| a + b}}
    

    (在 Ruby 1.8.7 上验证)

    【讨论】:

    • 这很酷,虽然我不知道为什么在没有注入空哈希的情况下合并可以工作......
    • @hurikhan77 第一次注入发生在数组的第一项初始化——而不是空元素。
    • @Peter 下划线作为合并的第一个块参数有什么作用?
    • @Beerlington,这只是一个我不想使用的变量。它实际上是一个 Python 约定来命名它。 (传递给block的三个参数是key、x值、y值。)
    • @Peter 我认为下划线更像是一个 Haskell 约定(来自其模式匹配),python 也采用了它......
    猜你喜欢
    • 2011-04-13
    • 1970-01-01
    • 2013-10-01
    • 2018-07-29
    • 1970-01-01
    • 2019-04-30
    • 2023-03-25
    • 1970-01-01
    相关资源
    最近更新 更多