2012-08-10 74 views
3

假设我们在这里有一个嵌套散列。ruby​​将新的键值对添加到嵌套散列

a = {:"0" => {:CA => {:count => 10}}} 
如果我们想要一个新的哈希对添加到该散列

,说

a = {:"0" => {:NY => {:count => 11}}} 

,并让它成为

a = {:"0" => {:CA => {:count =>10}, :NY => {:count => 11}}} 

我该怎么办?

我已经试过

a[:0][:NY][:count] = 11 

,但得到的错误 “未定义的方法`[] =”的零:NilClass(NoMethodError)”

+2

你可能想看看格式指导。使用反引号代替这里的'code here'或cariage return加上4个空格。另外看预览会有所帮助。 – diedthreetimes 2012-08-10 00:44:07

回答

5

我的猜测是,你想要做这样的事。

a = {:"0" => {:CA => {:count => 10}}} 
b = {:"0" => {:NY => {:count => 11}}} 
a[:"0"][:NY] = b[:"0"][:NY] #=> {:"0"=>{:CA=>{:count=>10}, :NY=>{:count=>11}}} 

你也可以利用合并

a = {:"0" => {:CA => {:count => 10}}} 
b = {:"0" => {:NY => {:count => 11}}} 
a[:"0"] = a[:"0"].merge(b[:"0"]) #=> {:"0"=>{:CA=>{:count=>10}, :NY=>{:count=>11}}} 
9

你所得到的零的:NilClass错误,因为你试图设置散列的关键尚不存在。您需要创建密钥的值:NY。

a[:"0"].merge!({:NY => {:count => 11}}) 

a[:"0"][:NY] = {:count => 11} 
+0

这与我说的有什么不同? – diedthreetimes 2012-08-10 01:47:45

+0

编辑之前,它们稍有不同。现在唯一的区别是我的答案并没有创建额外的,在我看来,分配或合并之前不必要的散列。 – 2012-08-10 02:15:36