6

假设我们这里有一个嵌套散列。

a = {:"0" => {:CA => {:count => 10}}}

如果我们想向该哈希添加一个新的哈希对,比如说

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

让它成为

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

我应该怎么办?

我试过了

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

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

4

2 回答 2

9

您收到 nil:NilClass 错误,因为您试图设置一个尚不存在的哈希键。您需要创建作为键值的哈希值:NY。

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

或者

a[:"0"][:NY] = {:count => 11}
于 2012-08-10T01:30:02.797 回答
7

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

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}}}
于 2012-08-10T00:46:05.120 回答