如何计算哈希红宝石内的数组总和



Hai 我正在使用我的数据创建一个 JSON 文件,我需要在将其保存到数据库之前计算几个小时

我正在将该哈希分配给变量有效负载并尝试这样做,但它返回了一个错误 TypeError(没有将符号隐式转换为整数(:

total_hours = @payload.sum{|activity| activity[:hours].to_f}

转换为 json 之前的哈希

{:activities=>
[{:project=>1,
:activity=>"my activity",
:hours=>0.2e1,
:date=>Sat, 10 Aug 2019 00:00:00 UTC +00:00},
{:project=>2,
:activity=>"Tester",
:hours=>0.2e1,
:date=>Thu, 01 Aug 2019 00:00:00 UTC +00:00},
{:project=>2,
:activity=>"Tester",
:hours=>0.3e1,
:date=>Thu, 01 Aug 2019 00:00:00 UTC +00:00}]}

我需要对哈希内的数组的小时数求和。谢谢

如果你使用的是 Rails,这里有一个简短的方法:

@payload[:activities].pluck(:hours).reduce(:+)

你应该使用:

total_hours = @payload[:activities].sum{|activity| activity[:hours].to_f}

你看,你想做的,本质上是:

[
{
:project=>1,
:activity=>"my activity",
:hours=>0.2e1,
:date=>Sat, 10 Aug 2019 00:00:00 UTC +00:00
},
{
:project=>2,
:activity=>"Tester",
:hours=>0.2e1,
:date=>Thu, 01 Aug 2019 00:00:00 UTC +00:00
},
{
:project=>2,
:activity=>"Tester",
:hours=>0.3e1,
:date=>Thu, 01 Aug 2019 00:00:00 UTC +00:00
}
].sum{|activity| activity[:hours].to_f}

但是,您正在@payload变量(哈希(上调用.sum。您想要的是与键:activities关联的哈希值。因此,您需要在@payload[:activities]返回上述数组的@payload[:activities]上调用.sum

最新更新