follow us in feedly

Rubyのハッシュ作成時にデフォルト値を指定する方法が便利

Rubyでハッシュの値にハッシュや配列を持たせたい場合の便利な方法をメモ。
ハッシュの値としてハッシュを入れる場合は毎回初期化してあげないとエラーになりますが、
ハッシュの作成時にキーに対応する値が未定義の場合のデフォルト値を指定すると上手くできます。

ブロックを使ってハッシュにデフォルト値を指定する

下記のようにh[‘foo’][‘bar’]に値を代入しようとしてもエラーになります。
h[‘foo’]はnilなので、[]=メソッドがないと怒られます。

h = Hash.new
h['foo']['bar'] = 100 # NoMethodError: undefined method `[]=' for nil:NilClass

今まではエラーにならないように毎回初期化してたんだけど。

h = Hash.new
h['foo'] = Hash.new
hash['foo']['bar'] = 100
p hash # {"foo"=>{"bar"=>100}}

下記の1行目のようにすると、h[‘foo’]が未定義の場合に自動でデフォルト値を代入してくれる。
この場合は、{}(ハッシュ)が代入される。

h = Hash.new { |hash, key| hash[key] = Hash.new }
hash['foo']['bar'] = 100
p h # {"foo"=>{"bar"=>100}}

# 値があればデフォルト値は代入されない
h['hoge'] = 200
p h # {"foo"=>{"bar"=>100}, "hoge"=>200}

なかなか便利でいい感じです。
ソースコードがちょっとすっきりしました。

タグ: ,

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください