ruby - Ruby Hash Group 按两个键
问题描述
我有一个看起来像这样的 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_h
是 的简短版本map { |...| [x, y] }.to_h
,如果您的 Ruby 版本还不支持它,您可以使用它。
推荐阅读
- c# - 如何在 HttpResponseMessage.Content.Headers.ContentType 中显示图像
- flutter - Flutter bloc 监听器不监听状态变化
- vue.js - Vue 组件按钮没有被动态禁用
- laravel - 外部 API 身份验证应该是 Laravel 中的 ServiceProvider 还是 Controller?
- css - bootstrap nth:child css 属性不起作用
- performance - 在负载测试的空手道加特林中无法实现预期的事务
- c# - C# 在忽略命名空间的同时反序列化 xml
- html - 如何设置 html 下拉菜单的样式
- javascript - discord.js 发送消息 foreach 频道问题
- javascript - 如何自定义 v-data-table 中的所有标题?