[ {"day"=>"2021-02-23", "policy_state"-6ren">
gpt4 book ai didi

Ruby Hash Group 通过两个键

转载 作者:行者123 更新时间:2023-12-05 08:30:06 26 4
gpt4 key购买 nike

我有一个 Ruby 哈希,看起来像这样-

report = {
"count_by_state"=>[
{"day"=>"2021-02-23", "policy_state"=>2, "count"=>48},
{"day"=>"2021-02-23", "policy_state"=>3, "count"=>5},
{"day"=>"2021-02-23", "policy_state"=>4, "count"=>89},
{"day"=>"2021-02-25", "policy_state"=>2, "count"=>1},
{"day"=>"2021-02-25", "policy_state"=>3, "count"=>4},
{"day"=>"2021-02-25", "policy_state"=>4, "count"=>90}
]
}

我正在尝试获得一个看起来像这样的散列

{2: {"2021-02-23" => 48,"2021-02-25" => 1},
3: {"2021-02-23" => 5,"2021-02-25" => 4},
4: {"2021-02-23" => 89,"2021-02-25" => 90}}

我已经尝试了很多东西并且到目前为止已经使用这段代码-

grouping = report['count_by_state'].group_by {|x| x['policy_state']}
puts grouping
puts grouping.map { |k,v| [ k => v.group_by {|x| x['day']} ] }

{2=>{"2021-02-23"=>[{"day"=>"2021-02-23", "policy_state"=>2, "count"=>48}], "2021-02-25"=>[{"day"=>"2021-02-25", "policy_state"=>2, "count"=>1}]}}
{3=>{"2021-02-23"=>[{"day"=>"2021-02-23", "policy_state"=>3, "count"=>5}], "2021-02-25"=>[{"day"=>"2021-02-25", "policy_state"=>3, "count"=>4}]}}
{4=>{"2021-02-23"=>[{"day"=>"2021-02-23", "policy_state"=>4, "count"=>89}], "2021-02-25"=>[{"day"=>"2021-02-25", "policy_state"=>4, "count"=>90}]}}

如何从 day 获取值并计数并创建一个值对?我正在尝试使用 squid 创建图表,它使用特定格式的数据。

最佳答案

您在第一组之后对结果进行分组,但散列内容保持不变,您可以使用 map 仅使用您需要的值创建新散列:

report['count_by_state'].group_by { |count| count['policy_state'] }
.transform_values do |val|
val.to_h { |hash| hash.values_at('day', 'count') }
end
# {
# 2=>{"2021-02-23"=>48, "2021-02-25"=>1},
# 3=>{"2021-02-23"=>5, "2021-02-25"=>4},
# 4=>{"2021-02-23"=>89, "2021-02-25"=>90}
# }

to_hmap { |...| 的简短版本[x, y] }.to_h,如果你的Ruby版本不支持,你可以使用它。

关于Ruby Hash Group 通过两个键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66520393/

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