如何在Ruby中获取多维哈希中的键?

时间:2013-02-25 22:35:24

标签: ruby hash

因此,使用普通哈希,您可以使用它来获取密钥:

hash.keys

如何获取多维哈希的第二维的键,如下所示:

{"<id>"=>{"first_name"=>"test", "last_name"=>"test_l", "username"=>"test_user", 
"title"=>"Sales Manager", "office"=>"test", "email"=>"test@test.com"}}

<id>对每个项目都是唯一的。

所以我想从上面得到的钥匙是:first_name, last_name, username, title, office and email

4 个答案:

答案 0 :(得分:4)

您可以这样做:

hash["<id>"].keys

答案 1 :(得分:2)

以下内容将为您提供二级哈希中使用的所有键。我使用了uniq,因此您不会重复。

hash.collect { |k, v| v.keys }.flatten.uniq

答案 2 :(得分:2)

假设你有一个哈希,它有一个带有一个值的未知密钥:哈希。

h = {"<id>"=>{"first_name"=>"test", "last_name"=>"test_l", "username"=>"test_user", 
"title"=>"Sales Manager", "office"=>"test", "email"=>"test@test.com"}}

p h[h.keys.first].keys
#=> ["first_name", "last_name", "username", "title", "office", "email"]

(但每次我看到这样的结构时,我都想知道为什么它不是一个结构)。

答案 3 :(得分:2)

我假设你的意思是在基本散列中会有几个唯一的“id”键指向嵌套的散列,每个散列都包含“first_name”,“last_name”等键。如果是这样的话:

hash.values.map(&:keys)

将返回包含每个嵌套哈希的键的数组数组。

另一方面,如果你只有一个键值对(如你的例子),你可以做

hash.values.first.keys

将返回与单独嵌套哈希中的键对应的平面数组。