LoginSignup
10
11

More than 5 years have passed since last update.

質問:Rubyで、Hashのkeyが存在しないときに、keyごとに空配列を与えたい

Posted at

1.

Hash.new([])を使うと、keyが存在しないときに空配列を値にすることができるけれど、それはすべてのkeyで共有されてしまうオブジェクトなので、以下のようなことが起きてしまう。

h = Hash.new([])
h["foo"] << 123
h["foo"] << 456
h["baa"] << 1111
h["baa"] << 2222
p h["foo"] #=> [123, 456, 1111, 2222]
p h["baa"] #=> [123, 456, 1111, 2222]

2.

次のようにブロックを使えば、keyが存在しないときにkeyごとに別の空配列を値にできる。これをやりたい。

h = Hash.new { |hash,key| hash[key] = [] }
h["foo"] << 123
h["foo"] << 456
h["baa"] << 1111
h["baa"] << 2222
p h["foo"] #=> [123, 456]
p h["baa"] #=> [1111, 2222]

質問

みなさんは、上の2.のようなことをやりたいときに、Hash.new { |hash,key| hash[key] = [] } のように書きますか?

何かイディオムがありそうだけれど、見つけられなかったので質問しました。ご教示いただければ感謝です。

10
11
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
11