因此,我正在进行一个项目,其中有一个散列,如下所示:
{ 1=>{:id=>133,
:total=>#<BigDecimal:cc08558,'0.41323E3',18(18)>},
2=>{:id=>134,
:total=>#<BigDecimal:cc082b0,'0.523E1',18(18)>},
6=>{:id=>166,
:total=>#<BigDecimal:cbdbb98,'0.837E2',18(18)>},
8=>{:id=>168,
:total=>#<BigDecimal:cbdb8a0,'0.72236E3',18(18)>},
9=>{:id=>169,
:total=>#<BigDecimal:cbdb738,'0.132E3',9(18)>} }我想将元素添加到这个散列中,它包含哈希中所有值的总和。其结果如下:
{ 1=>{:id=>133,
:total=>#<BigDecimal:cc08558,'0.41323E3',18(18)>},
2=>{:id=>134,
:total=>#<BigDecimal:cc082b0,'0.523E1',18(18)>},
6=>{:id=>166,
:total=>#<BigDecimal:cbdbb98,'0.837E2',18(18)>},
8=>{:id=>168,
:total=>#<BigDecimal:cbdb8a0,'0.72236E3',18(18)>},
9=>{:id=>169,
:total=>#<BigDecimal:cbdb738,'0.132E3',9(18)>},
0=>{:id=>000,
:total=><whatever the total is>} }但我在做这件事时遇到了一些困难
month_hash.each.sum(:total)但这似乎不是我想做的。
任何帮助都将不胜感激。
发布于 2016-12-23 13:38:09
您可以使用values获取所有子散列,并使用inject迭代散列并对总计进行求和:
sum = h.values.inject(0){|sum,h| sum + h[:total] }
h[0] = {:id => 0, :total => sum}h现在是:
{1=>{:id=>133, :total=>413.23},
2=>{:id=>134, :total=>5.23},
6=>{:id=>166, :total=>83.7},
8=>{:id=>168, :total=>722.36},
9=>{:id=>169, :total=>132.0},
0=>{:id=>0, :total=>1356.52}}请注意,如果您再次运行它,您将添加两次sum:
{1=>{:id=>133, :total=>413.23},
2=>{:id=>134, :total=>5.23},
6=>{:id=>166, :total=>83.7},
8=>{:id=>168, :total=>722.36},
9=>{:id=>169, :total=>132.0},
0=>{:id=>0, :total=>2713.04}}https://stackoverflow.com/questions/41302394
复制相似问题