2012-08-10 108 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