Rubyでインデックスを使用して配列をハッシュに変換するにはどうすればよいですか?
概要
これの配列を変換したいと思います。
["Cyan", "Magenta", "Yellow", "Black"]
このようにハッシュするには:
{1 => "Cyan", 2 => "Magenta", 3 => "Yellow", 4 => "Black"}
Ruby言語で作るにはどうしたらいいでしょうか?
このコードを使ってみました
color = ["Cyan", "Magenta", "Yellow", "Black"]
var.each_with_object({}) do |color_hash|
color_hash
end
しかし、エラーが発生しました。その正しいコードは何ですか?
解決策
正しい方法で、Enumerable#each_with_object と Enumerator#with_index を次のように組み合わせることができます。
colors = %w[Cyan Magenta Yellow Black]
colors.each_with_object({}).with_index(1) { |(color, result), id| result[id] = color }
# => {1=>"Cyan", 2=>"Magenta", 3=>"Yellow", 4=>"Black"}
質問にruby-on-railsでタグ付けしたので、Enumerable#index_byを使用できます(これもプレーンなRuby Enumerator#with_indexを使用します)。
colors = %w[Cyan Magenta Yellow Black]
colors.index_by.with_index(1) { |_, id| id }
# => {1=>"Cyan", 2=>"Magenta", 3=>"Yellow", 4=>"Black"}