我有:
hash = {key1: "value1", key2: {key3: "value2", key4: "value3"}}
我的目标是访问key3
和key4
。
我的代码是:
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
有人可以解释发生了什么,以及为什么我会收到此错误?
答案 0 :(得分:1)
{key1: "value1", key2: {key3: "value2", key4: "value3"}}
您的哈希值不是哈希值的哈希值,在第一次迭代中,value
是value1
这是一个字符串,您不能迭代string
。
要避免这种情况,您可以事先检查,
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
我的目标是访问key3和key4的值。 (我想将它们放在某种变量中以便在其他地方使用)
您可以根据关键关联遍历哈希。根据您的需要,您可以简单地执行:
hash[:key2][:key3]
#=> "value2"
hash[:key2][:key4]
#=> "value3"