当前位置:  开发笔记 > 后端 > 正文

从具有未知键的嵌套哈希中选择一个值

如何解决《从具有未知键的嵌套哈希中选择一个值》经验,为你挑选了1个好方法。

我有一个看起来像这样的哈希:

hash = { "data" => {
    "Aatrox" => {
        "id" => "Aatrox",
        "key" => "266",
        "name" => "Aatrox"
        },
    "Ahri" => {
        "id" => "Ahri",
        "key" => "123",
        "name" => "Ahri"
        },
    "Another name" => {
        "id" => "Another name",
        "key" => "12",
        "name" => "Another name"
        },
   }
}

我正在尝试从匹配给定键的"id"获取值:

def get_champion_name_from_id(key)
    filtered = @champion_data["data"].select do | key, champ_data |
        Integer(champ_data["key"]) == key
    end     
end

我使用select来获取与块匹配的项,但是,返回值是另一个看起来像这样的哈希:

{ 
    "Aatrox": {
        "id" => "Aatrox",
        "key" => "266",
        "name" => "Aatrox"
    } 
}

我怎样才能避免这种情况并获得最后一个嵌套哈希?如果传递的密钥是266,我想得到这个哈希:

{
    "id" => "Aatrox",
    "key" => "266",
    "name" => "Aatrox"
} 

这个哈希是解析的JSON文件的结果,所以我无法filtered["Aatrox"]获得给定的值.



1> falsetru..:

Hash#values仅返回值(不带键​​).通过使用Enumerable#find,您将获得第一个匹配的项目,而不是包含单个项目的数组.

@champion_data['data'].values.find { |champ_data|
  champ_data['key'] == '266'
}
# => {"id"=>"Aatrox", "key"=>"266", "name"=>"Aatrox"}

def get_champion_name_from_id(key)
  key = key.to_s
  @champion_data['data'].values.find { |champ_data|
    champ_data['key'] == key
  }
end

推荐阅读
mobiledu2402851373
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有