结合2个字符串,在Ruby中创建一系列哈希



我有以下数据:

fields = ["player_id", "name", "team", "player_id", "name", "team", "player_id", "name", "team"]
values = ["001", "Pound", "Monstars", "002", "Bang", "Monstars", "003", "Jordan", "Looney Tunes"]

我想创建一系列哈希,因此数据看起来像这样:

[{"player_id"=>"001", "name"=>"Pound", "team"=>"Monstars"}, {"player_id"=>"002", "name"=>"Bang", "team"=>"Monstars"}, {"player_id"=>"003", "name"=>"Jordan", "team"=>"Looney Tunes"}]

在我寻求改进的过程中,我认为我仍在做更多的步骤:

sliced_fields = fields.each_slice(3).to_a
=> [["player_id", "name", "team"], ["player_id", "name", "team"], ["player_id", "name", "team"]]
sliced_values = values.each_slice(3).to_a
=> [["001", "Pound", "Monstars"], ["002", "Bang", "Monstars"], ["003", "Jordan", "Looney Tunes"]]
new_array = sliced_values.map { |i| Hash[sliced_fields[sliced_values.index(i)].zip(i)] }
=> [{"player_id"=>"001", "name"=>"Pound", "team"=>"Monstars"}, {"player_id"=>"002", "name"=>"Bang", "team"=>"Monstars"}, {"player_id"=>"003", "name"=>"Jordan", "team"=>"Looney Tunes"}]

有一个更简单的方法来完成此操作吗?

您非常接近。zip首先,然后each_slice

fields.zip(values).each_slice(3).map(&:to_h)

在Repl.it上查看:https://repl.it/i7s3

最新更新