我有一些看起来像这样的数据:
[["2000475042", "1"], [{:match_day_uid=>"2000475042", :external_player_uid=>"88", :external_team_uid=>"1", :player_display_name=>"Cardin Constance", :team_display_name=>"Alpha Monkeys", :score=>33}, ...]]
[["2000475042", "2"], [{:match_day_uid=>"2000475042", :external_player_uid=>"253", :external_team_uid=>"2", :player_display_name=>"Cochran Callahan", :team_display_name=>"Ghost Commandos", :score=>169}, ...]]
...
数据按第一个数组中的两个ID match_day_uid
和external_team_uid
进行分组,然后列出第二个数组中匹配数据的每个实例。
我想用这个数据创建一个新哈希,其中分组是match_day_uid
,其中每个团队的数据都在由external_team_uid
键入的哈希中。
目前我的代码如下:
def output
output = {}
data_stream.each { |identifiers, data|
output[identifiers[0]] = {
:external_team_uid => identifiers[1],
:team_score => data.map { |p| p[:score] }.inject(:+),
:data => [ data ]
}
}
output
end
输出'正确' - 我可以调用output["2000475042"]
并获取数据,如下所示:
{:external_team_uid=>"3", :team_score=>1026, :data=>[ <all the data here> ]}
但是只有一个团队 - 这意味着每次都会覆盖密钥的值,并且我留下了最后一次迭代的任何团队的数据。
如何将所有团队的数据作为一个键的值(即match_day_id)获取?
所需输出
:match_days => {
:match_day_1 = [
'3' => {:external_team_uid=>"3", :team_score=>1026, :data=>[ <all the data here> ]},
'4' => {:external_team_uid=>"4", :team_score=>2222, :data=>[ <all the data here> ]},
etc...
],
:match_day_1 = [
'3' => {:external_team_uid=>"3", :team_score=>415, :data=>[ <all the data here> ]},
'4' => {:external_team_uid=>"4", :team_score=>9644, :data=>[ <all the data here> ]},
etc...
]
...
}
答案 0 :(得分:1)
def convert(data_stream)
output = {}
data_stream.each { |identifiers, data|
output[identifiers[0]] ||= []
output[identifiers[0]] << {
:external_team_uid => identifiers[1],
:team_score => data.map { |p| p[:score] }.inject(:+),
:data => [ data ]
}
}
output
end