【问题标题】:How do I fetch multiple hash keys with a nested hash?如何使用嵌套哈希获取多个哈希键?
【发布时间】:2013-01-30 11:16:45
【问题描述】:

我正在玩嵌套散列,并且试图弄清楚当我的散列是嵌套散列时如何获取多个键:

imahash = { :id => { :name => "Alma", :email => "alma@mail.com" },
            :stats => { :gender => "Female" }, 
            :location => { :city => "Freeport", :state => "Maine" } 
          }

我知道如何检索嵌套值,输入哈希名称将转储所有键和值。但我想做的是只获取特定的键,例如 :name 和 :gender 。或仅 :name 和 :city。

这可能吗?因为根据我的发现,您似乎一次只能检索一个键的哈希值或一次检索所有键的哈希值。

我想要的输出是这样的:

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

【问题讨论】:

    标签: ruby hash


    【解决方案1】:

    我想你想在一个元组中获取值?您可以创建一个包含任何您想要的值集合的数组。

    请尝试以下名称和城市:

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

    【讨论】:

    • 是的,如果一个元组是我认为的那样(只是一个有序列表,对吗?),那么创建一个新数组(或在 mportiz 的答案中,一个新的)就可以了。出于兴趣,有没有办法在不创建新哈希/数组的情况下获得输出?
    • 如果您创建一个函数,该函数接受一个“哈希路径”数组来导航嵌套哈希(类似于 xml 文档的 xpath),则只能引用一次 imahash。我怀疑你可以在不创建新的哈希/数组的情况下做到这一点。如果您出于效率原因而询问,恕我直言,这是过早的优化。
    • 好的,我明白了。是的,我主要是出于效率原因。这一切都澄清了,谢谢。
    【解决方案2】:

    不完全确定您在这里问的是什么,但您似乎想从更大的哈希中创建一个新的哈希。

    仅获取特定的键,例如 :name 和 :gender

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

    会导致

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

    【讨论】:

    • 创建一个新的哈希值。这回答了我的问题的一部分,因为我想我需要为每个要获取的密钥使用“imahash”?我不能在一行中使用它。有没有办法在不创建新哈希的情况下实现输出?
    • 不确定你的意思——你只是想要一个包含两个字段的字符串吗?不清楚您希望输出是什么..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-30
    • 1970-01-01
    • 1970-01-01
    • 2010-12-19
    • 2014-10-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多