如果我有一个类似下面的哈希,我想循环第二级密钥。
为什么这会失败?
hash["Element"].each do |id|
h[id] = hash[id]["Name"]
end
散列
{
"Element" => {
"499723" => {
"Name" => "A",
},
"499725" => {
"Name" => "B",
},
}
答案 0 :(得分:2)
失败是因为在哈希上使用.each
会产生键和值的元组。
hash = {
"Element" => {
"499723" => {
"Name" => "A",
},
"499725" => {
"Name" => "B",
},
}
}
hash["Element"].each do |id|
p id
end
["499723", {"Name"=>"A"}]
["499725", {"Name"=>"B"}]
因此,您需要使用
hash["Element"].each do |id, value|
# ...
end
如果您不需要值
hash["Element"].each do |id, _|
# ...
end
但是,您可以保留该值并直接访问它
hash["Element"].each do |id, value|
h[id] = value["Name"]
end
在您的情况下,一个简单的解决方案是将Enumberable#each_with_object
与之前的信息结合使用:
hash["Element"].each_with_object({}) do |(id, value), acc|
acc[id] = value["Name"]
end
# => {"499723"=>"A", "499725"=>"B"}
答案 1 :(得分:1)
hash["Element"].each.with_object({}) do |(id, subhash), result|
result[id] = subhash["Name"]
end