Techioz Blog

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"}