2017-10-17 8 views
2

Rubyに新しいハッシュを挿入したり既存のハッシュに値を追加したりするハッシュのハッシュを持っています。 私はRubyはこれを行うには良い方法を持っているような感じ保つ:map[key] で何valueが存在しない場合は失敗したこと、私はRubyハッシュに値を格納するのにあまり厄介な方法はありますか?

map[key].store(:name, value) || map[key] = {name: value} 

ような何かを行うことができるようにしたい

map # => { 1 => {:type => "humbug", :name => "grinch" }, 2 => {:type => 2 } } 

    if map[key] 
    map[key].store(:name, value) 
    else 
    map[key] = { name: value } 
    end 

もちろん...提案?

+3

Rubyには「マップ」はありません。ハッシュがあります。 – meagar

+0

@ meagar busted!私は一日中グルーヴィーを使用しています。場所にマップがあります:D – GLaDOS

答えて

5

あまり厄介な方法はありますか?

はい。

map[key] ||= {} 
map[key].store(:name, value) # or map[key][:name] = value 

また、Hash欠損値ハンドラの1つを使用してください。

map = Hash.new { |hash, key| hash[key] = {} } 
# then set fearlessly, missing hashes will be auto-created. 
map[key][:name] = value 
+0

'(map [key] || = {})store(:name、value)'。 – mudasobwa

+0

@mudasobwa私は、これまでに行っていないだろう。しかし、それぞれ彼自身に:) –

+1

@SergioTulentsev私はこれまでに行くだろう。私はRubyの優雅さが大好きです。 – GLaDOS

関連する問題