rubyco(るびこ)の日記 RSSフィード

2013-06-07

ハッシュの値が存在しないときの値(デフォルト値)を設定する

  • ハッシュの値がまだ存在しなかったら0を代入し、あったら数を足し込んでいこうと思います。
h = Hash.new
if not h[:key]
  h[:key] = 0
end
h[:key] += 123
h = Hash.new
if not h.key? :key
  h[:key] = 0
end
h[:key] += 123
  • ハッシュを作るときにHash.new(0)でデフォルト値0を与えておくと「存在しなかったら」というif文が不要になります。
h = Hash.new(0)
h[:key] += 123
h = Hash.new([])
h[:key] << :value
  • ビットパターンも。
h = Hash.new(0)
h[:key] |= 0b1011

とおりすがりとおりすがり 2013/06/07 22:01 配列の例は注意が必要ですね。

h1 = Hash.new([])
h1.default # => []
h1[:key1] << :value # => [:value]
h1[:key2] << :value # => [:value, :value]
h1 # => {}
h1.default # => [:value, :value]

h2 = Hash.new{|h, k| h[k] = []}
h2.default # => nil
h2[:key1] << :value # => [:value]
h2[:key2] << :value # => [:value]
h2 # => {:key1=>[:value], :key2=>[:value]}
h2.default # => nil

http://doc.ruby-lang.org/ja/2.0.0/method/Hash/s/new.html

rochefortrochefort 2013/06/08 20:30 最初の例は、私はこんな風に書いたりします(ご存知かもしれませんが)。

h = Hash.new
h[:key] ||= 0
h[:key] += 123

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証