如何在Ruby中获得多维哈希中的密钥?

如何在Ruby中获得多维哈希中的密钥?,ruby,hash,Ruby,Hash,因此,对于普通散列,您可以使用它来获取密钥: hash.keys 如何获取多维散列的第二维度的键,如下所示: {"<id>"=>{"first_name"=>"test", "last_name"=>"test_l", "username"=>"test_user", "title"=>"Sales Manager", "office"=>"test", "email"=>"test@test.com"}} {”“=>{“名字”=>“测

因此,对于普通散列,您可以使用它来获取密钥:

hash.keys
如何获取多维散列的第二维度的键,如下所示:

{"<id>"=>{"first_name"=>"test", "last_name"=>"test_l", "username"=>"test_user", 
"title"=>"Sales Manager", "office"=>"test", "email"=>"test@test.com"}}
{”“=>{“名字”=>“测试”、“姓氏”=>“测试”、“用户名”=>“测试用户”,
“职务”=>“销售经理”、“办公室”=>“测试”、“电子邮件”=>”test@test.com"}}
对于每个项目都是唯一的


因此,我想从上面得到的关键是:
名字、姓氏、用户名、头衔、办公室和电子邮件

hash["<id>"].keys
hash[“”].密钥

以下内容将获得第二级哈希中使用的所有键。我使用了
uniq
,这样您就不会得到重复的

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

假设您有一个散列,其中有一个未知键和一个值:一个散列

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"]
h={”“=>{“名字”=>“测试”、“姓氏”=>“测试”、“用户名”=>“测试用户”,
“职务”=>“销售经理”、“办公室”=>“测试”、“电子邮件”=>”test@test.com"}}
p h[h.keys.first].keys
#=>[“名字”、“姓氏”、“用户名”、“头衔”、“办公室”、“电子邮件”]

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

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

hash.values.map(&:keys)
将返回一个数组数组,其中包含每个嵌套哈希的键

另一方面,如果只有一个键值对(如示例中所示),则可以这样做

hash.values.first.keys

它将返回一个与孤立嵌套散列中的键对应的平面数组。

hash.values.collect(&:keys).flatte.uniq
,这避免了阻塞。如果使用
map
collect
,习惯用法是使用
{/code>和
}
而不是
do
end
。当将方法链接到块的末尾时尤其如此。链接到
end
尤其难看。
hash[“”]。键
更正确。OP将键显示为文本字符串。