【问题标题】:Rails sum values in an array of hashes [duplicate]Rails对哈希数组中的值求和[重复]
【发布时间】:2023-03-25 22:22:02
【问题描述】:

下面是一个哈希数组:

array = [
  {loading: 10, avg: 15, total: 25 },
  {loading: 20, avg: 20, total: 40 },
  {loading: 30, avg: 25, total: 55 }
]

我需要对每个散列的值求和,结果应该是相同键的散列:

{loading: 60, avg: 60, total: 120}

一种方法是将每个键的值单独求和,然后像这样合并到哈希中:

loading = array.map { |h| h[:loading] }.sum
avg = array.map { |h| h[:avg] }.sum
total = array.map { |h| h[:total] }.sum

{loading: loading, avg: avg, total: total}

有没有更好的方法呢?因为未来可能会增加密钥。

【问题讨论】:

    标签: ruby-on-rails ruby


    【解决方案1】:

    您可以将each_with_object 与哈希和默认值一起使用:

    array = [
      {loading: 10, avg: 15, total: 25 },
      {loading: 20, avg: 20, total: 40 },
      {loading: 30, avg: 25, total: 55 }
    ]
    
    sum = Hash.new(0)
    
    array.each_with_object(sum) do |hash, sum|
      hash.each { |key, value| sum[key] += value }
    end
     # => {:loading=>60, :avg=>60, :total=>120}
    

    它适用于任意数量的键,并且不会在所有散列中都不存在键时抱怨。


    顺便说一句,你可以替换

    array.map { |h| h[:loading] }.sum
    

    array.sum { |h| h[:loading] }
    

    【讨论】:

      猜你喜欢
      • 2011-04-13
      • 1970-01-01
      • 1970-01-01
      • 2018-07-27
      • 1970-01-01
      • 2019-04-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多