循环嵌套哈希

时间:2017-05-30 10:47:56

标签: ruby

我有:

hash = {key1: "value1", key2: {key3: "value2", key4: "value3"}}

我的目标是访问key3key4

的值

我的代码是:

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

有人可以解释发生了什么,以及为什么我会收到此错误?

1 个答案:

答案 0 :(得分:1)

{key1: "value1", key2: {key3: "value2", key4: "value3"}}

您的哈希值不是哈希值的哈希值,在第一次迭代中,valuevalue1这是一个字符串,您不能迭代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"