Ruby 通过嵌套哈希循环
我有: 我的目标是访问键3和键4的值 我的代码是:Ruby 通过嵌套哈希循环,ruby,Ruby,我有: 我的目标是访问键3和键4的值 我的代码是: hash = {key1: "value1", key2: {key3: "value2", key4: "value3"}} 我得到一个有错误的输出: hash.each do |key, value| puts key value.each do |k, v| puts k puts v end end 有人能解释一下发生了什么,为什么我会犯这个错误吗 key1 NoMethodError: undefine
hash = {key1: "value1", key2: {key3: "value2", key4: "value3"}}
我得到一个有错误的输出:
hash.each do |key, value|
puts key
value.each do |k, v|
puts k
puts v
end
end
有人能解释一下发生了什么,为什么我会犯这个错误吗
key1
NoMethodError: undefined method `each' for "value1":String
您的散列不是散列的一致散列,在第一次迭代中,值是value1,它是一个字符串,您不能在字符串上迭代
为了避免这种情况,你可以事先检查一下
{key1: "value1", key2: {key3: "value2", key4: "value3"}}
我的目标是访问键3和键4的值。我想把它们放在某种变量中,以便在其他地方使用
可以根据键关联遍历哈希。根据上述需要,您可以简单地执行以下操作:
hash.each do |key,value|
p key
if value.is_a?(Hash)
value.each do |k,v|
p k
p v
end
else
p value
end
end
对未来的一点建议:发布干净、格式正确的代码。来自IRB的噪音是无用的,事实上,它会分散人们阅读代码的注意力,这种结构背后的逻辑是什么?您是否需要首先筛选所有具有哈希值的键,因为您似乎无法简单地访问哈希[:key2]。值?@Ja͢ck:您的意思是您可以简单地访问吗@SergioTulentsev是的,因为在这个例子中,这将是显而易见的方法,而不是,因为它可能意味着更具动态性:谢谢大家!还有很多东西要学!:。。。或val3,val4=hash[:key2]。值位于:key3,:key4
hash[:key2][:key3]
#=> "value2"
hash[:key2][:key4]
#=> "value3"