2017-06-05 9 views
1

でハッシュの配列を作成するために、文字列の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"}] 

は、より簡単な方法はありますこれを達成するために?

+0

あなたの所望の出力は意味がありません。あなたは同じ情報の3つのハッシュをしたいですか? –

+0

@theTinMan申し訳ありませんが、私は希望の結果を編集し、私の解決策があなたが言ったように同じ情報を作り出したことを認識しました。 – massaskillz

答えて

1

あなたはかなり近くでした。その後、each_slicezip最初:

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

はrepl.itでそれを参照してください:https://repl.it/I7S3

関連する問題