"Apr, 2014", "price_rate"=>10, "c-6ren">
gpt4 book ai didi

ruby-on-rails - ruby 中嵌套数组中哈希键的总和

转载 作者:数据小太阳 更新时间:2023-10-29 08:37:18 24 4
gpt4 key购买 nike

我有一个数组,其中包含具有相同键集的散列数组。我需要对每个数组的每组键求和,留下一个散列数组。

array = [
[{"x"=>"Apr, 2014", "price_rate"=>10, "cost_rate"=>10, "profit"=>10},
{"x"=>"May, 2014", "price_rate"=>10, "cost_rate"=>10, "profit"=>10},
{"x"=>"Jun, 2014", "price_rate"=>10, "cost_rate"=>10, "profit"=>10} ],
[{"x"=>"Apr, 2014", "price_rate"=>10, "cost_rate"=>10, "profit"=>10},
{"x"=>"May, 2014", "price_rate"=>10, "cost_rate"=>10, "profit"=>10},
{"x"=>"Jun, 2014", "price_rate"=>10, "cost_rate"=>10, "profit"=>10} ],
[{"x"=>"Apr, 2014", "price_rate"=>10, "cost_rate"=>10, "profit"=>10},
{"x"=>"May, 2014", "price_rate"=>10, "cost_rate"=>10, "profit"=>10},
{"x"=>"Jun, 2014", "price_rate"=>10, "cost_rate"=>10, "profit"=>10} ]
]

这会留给我

[{"x"=>"Apr, 2014", "price_rate"=>30, "cost_rate"=>30, "profit"=>30},
{"x"=>"May, 2014", "price_rate"=>30, "cost_rate"=>30, "profit"=>30},
{"x"=>"Jun, 2014", "price_rate"=>30, "cost_rate"=>30, "profit"=>30} ]

我试过将它们展平成一个数组,合并(这似乎永远不会给我预期的结果),并减少以添加 - 但我一无所获。

有没有一种简洁的方法可以做到这一点?

编辑还要注意的是,每个数组中的散列数可能会有所不同。该示例针对的是一年中的四分之一,但生成的解决方案应该足够不可知,以允许输入尽可能多或尽可能少的数据集提供的条目。

最佳答案

这是一种(纯 Ruby)方式,它使用 Hash#update 的形式(又名 merge!),它使用一个 block 来确定要合并的两个散列中存在的键的值:

array.flatten.each_with_object({}) { |g,h|
h.update(g["x"]=>g.dup) { |_,oh,nh|
oh.update(nh) { |k,ov,nv| (k=="x") ? ov : ov+nv } } }.values
#=> [{"x"=>"Apr, 2014", "price_rate"=>30, "cost_rate"=>30, "profit"=>30},
# {"x"=>"May, 2014", "price_rate"=>30, "cost_rate"=>30, "profit"=>30},
# {"x"=>"Jun, 2014", "price_rate"=>30, "cost_rate"=>30, "profit"=>30}]

trh 指出我原来的解决方案修改了 array,这是我错过的。为避免这种情况,我将 g["x"]=>g 更改为 g["x"]=>g.dup

关于ruby-on-rails - ruby 中嵌套数组中哈希键的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28932803/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com