2017-10-17 39 views
2

我有一个哈希哈希散列,我插入新哈希值或将值添加到现有哈希。 我一直感觉像Ruby有一个更好的方式来做到这一点:有没有一种比较笨拙的方式来存储一个Ruby哈希值?

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

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

我希望能够像做

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

当然是失败的,如果没有valuemap[key] ...建议?

+3

没有 “图” 在Ruby中,有哈希值。 – meagar

+0

@meagar破坏!我整天都在使用groovy ......其中有各地的地图:D – GLaDOS

回答

5

有没有一种不太尴尬的方法?

是的。

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

或者使用哈希缺失值处理程序之一。

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

相关问题