脳汁portal

アメリカ在住(だった)新米エンジニアがその日学んだIT知識を書き綴るブログ

[Ruby] 多重Hashの宣言の仕方

RubyではPHPのようにデフォルトで多重Hashを利用することが出来ません。
以下のようなエラーになります。

single_h = Hash.new
single_h["first"]["second"] = "value"
  # => hash.rb:13:in `<main>': undefined method `[]=' for nil:NilClass (NoMethodError)

このnilエラーを回避するためには、Hash.newの引数で直接Hashの構造を書いてやればOKです。

multi_h = Hash.new { |hash,key| hash[key] = Hash.new {} }
multi_h["first"]["second"] = "value" # => OK

puts multi_h # => {"first"=>{"second"=>"value"}}