2011-09-09 158 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