« 録画奉行 | トップページ | カミノヒモ »

ハッシュの値に配列を使う

 ハッシュの値に配列を入れたいなあと思い、

 h = Hash.new([])

 などと初期化してからやってみたら、h.each しても {} と表示されるだけで何も出てこない。不思議に思って key を指定してみると表示された。あるようだけれど見えないという感じ?

 不思議だなあと思いつつも諦めて他の手段を使っていたところ、ふと「レシピ本」を見たらブロックで初期化するようにとのお告げ。

 h = Hash.new{|h, key| h[key] = []}

 などとすればよいらしいとわかって、やってみたら確かにいけた。理由はよくわからないけれど、ひとつ覚えたということでメモしておく。

 いやまあ、レシピ本見ればよいのですが。

4797359986Rubyレシピブック 第3版 303の技
青木 峰郎 後藤 裕蔵 高橋 征義 まつもと ゆきひろ
ソフトバンククリエイティブ 2010-08-28

by G-Tools

 最新版は 40 あまり技が増えているのか!

|

« 録画奉行 | トップページ | カミノヒモ »

コメント

Hash.new(value) は存在しないキーに対するデフォルト値を指定するだけなので

1. 存在しないキーでアクセスしても新たにキーと値のペアが登録されるわけではない

2. 全ての存在しないキーに対して同じオブジェクトを返す

という挙動を示します。良く「h = Hash.new([]); h[:a] << 1; h[:b] #=> [1]?」なんて質問してる人がいますね。

投稿: | 2011.12.09 22:02

なるほど。そういうことなのですか。
ありがとうございます。

投稿: ムムリク | 2011.12.10 12:44

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック


この記事へのトラックバック一覧です: ハッシュの値に配列を使う:

« 録画奉行 | トップページ | カミノヒモ »