2011-09-09 211 views
0

我與嵌套哈希玩弄,我試圖找出如何時,我的哈希是一個嵌套一個獲取多個密鑰:如何使用嵌套散列獲取多個散列鍵?

imahash = { :id => { :name => "Alma", :email => "[email protected]" }, 
      :stats => { :gender => "Female" }, 
      :location => { :city => "Freeport", :state => "Maine" } 
      } 

我知道如何檢索嵌套的值,並鍵入哈希名稱將轉儲所有的鍵和值。但我想要做的是獲取特定的鍵,例如:name和:gender only。或者:名稱和:僅限城市。

這可能嗎?因爲從我發現的情況來看,你似乎只能一次檢索一個鍵或一次檢索所有鍵的散列值。

我所需的輸出會是這樣的:

=> { :id => { :name => "Alma" }, :location => { :city => "Freeport" } } 

回答

0

要搶值出一個元組我相信?您可以創建一個數組,其中包含您想要的任何值的集合。

嘗試使用名稱和城市如下:

[imahash[:id][:name], imahash[:location][:city]] 
=> ["Alma", "Freeport"] 
+0

是啊,如果一個元組是什麼,我認爲這是(?只是一個有序列表右側) ,然後創建一個新的數組(或在mportiz的答案,一個新的)有效。出於興趣,有沒有辦法在不創建新散列/數組的情況下獲取輸出? – Murmur

+0

如果您創建一個函數來接收用於導航嵌套散列(類似於xml文檔的xpath)的「散列路徑」數組,則只能引用imahash一次。我懷疑你可以不創建一個新的散列/數組。如果你要求效率的原因,這是過早優化恕我直言。 – peakxu

+0

好的,我明白了。是的,我主要是出於提高效率的原因。這說明了一切,謝謝。 – Murmur

0

不完全相信你問在這裏,但它似乎像你想從更大的一個創建一個新的哈希值。

爲了獲取特定鍵,如:姓名和:性別只有

name_and_gender_hash = { 
    :name => imahash[:id][:name], 
    :gender => imahash[:stats][:gender] 
} 

會導致

{:name => "Alma", :gender => "female"} 
+0

創建一個新的散列工作。這回答我的問題的一部分,我想我需要使用「imahash」來獲取每個密鑰?我不能在一行中使用它。有沒有辦法實現輸出而不創建新的哈希? – Murmur

+0

不確定你的意思 - 你只是想要一個字符串與兩個領域呢?不清楚你想要輸出什麼。 – mportiz08