ruby将新的键值对添加到嵌套哈希

Bru*_*Lin 5 ruby hash ruby-on-rails

假设我们在这里有一个嵌套哈希.

a = {:"0" => {:CA => {:count => 10}}}
Run Code Online (Sandbox Code Playgroud)

如果我们想要为该哈希添加新的哈希对,比如说

a = {:"0" => {:NY => {:count => 11}}} 
Run Code Online (Sandbox Code Playgroud)

让它成为

a = {:"0" => {:CA => {:count =>10}, :NY => {:count => 11}}}
Run Code Online (Sandbox Code Playgroud)

我该怎么办?

我试过了

a[:0][:NY][:count] = 11
Run Code Online (Sandbox Code Playgroud)

但得到错误"undefined method` [] ='为nil:NilClass(NoMethodError)"

Luk*_*und 9

您收到nil:NilClass错误,因为您正在尝试设置尚不存在的哈希键.您需要创建作为密钥值的哈希值:NY.

a[:"0"].merge!({:NY => {:count => 11}})
Run Code Online (Sandbox Code Playgroud)

要么

a[:"0"][:NY] = {:count => 11}
Run Code Online (Sandbox Code Playgroud)


die*_*mes 6

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

a = {:"0" => {:CA => {:count => 10}}}
b = {:"0" => {:NY => {:count => 11}}} 
a[:"0"][:NY] = b[:"0"][:NY] #=> {:"0"=>{:CA=>{:count=>10}, :NY=>{:count=>11}}}
Run Code Online (Sandbox Code Playgroud)

你也可以利用合并

a = {:"0" => {:CA => {:count => 10}}}
b = {:"0" => {:NY => {:count => 11}}} 
a[:"0"] = a[:"0"].merge(b[:"0"]) #=> {:"0"=>{:CA=>{:count=>10}, :NY=>{:count=>11}}}
Run Code Online (Sandbox Code Playgroud)