我正在尝试访问具有这种结构(每个用户在特定日期的状态)的数据。如您所见,哈希键都是数组。此数据已使用group_by
从数据库中检索。
data = {
["active", "Rick"]=>["2019-07-09", "2019-07-10"],
["active", "Morty"]=>["2019-07-09", "2019-07-10"],
["active", "Summer"]=>["2019-07-09", "2019-07-10"],
["inactive", "Rick"]=> ["2019-07-01", "2019-07-02", "2019-07-03"],
["inactive", "Summer"]=>["2019-07-15"]
}
我希望此数据为嵌套哈希,如下所示。有没有办法重组它?
我知道可以像这样data[["active", "Summer"]]
来访问哈希中的每个项目。我尝试做类似data[["active", "*"]]
的操作(以获取所有用户的活动状态数据),但这没有用。
data = {
"active"=>{
"Rick"=>["2019-07-09", "2019-07-10"],
"Morty"=>["2019-07-09", "2019-07-10"],
"Summer"=>["2019-07-09", "2019-07-10"]
},
"inactive"=>{
"Rick"=>["2019-07-01", "2019-07-02", "2019-07-03"],
"Summer"=>["2019-07-15"]
}
}
答案 0 :(得分:2)
这应该有效:
new_data = {}
data.each do |k, v|
new_data[k.first] ||= []
new_data[k.first] << { k.last => v}
end
但是,如果您控制着数据库/查询,那么最好尽快以正确的格式从数据库中检索数据。
答案 1 :(得分:1)
您可以执行以下操作-
new_data = { 'active' => [], 'inactive' => [] }
data.each do |key, value|
if key.first == 'active'
new_data['active'] << { key.last => value }
elsif key.first == 'inactive'
new_data['inactive'] << { key.last => value }
end
end