lixmet
lixmet
发布于 3周前

Ruby递归迭代多层嵌套的hash以及数组

Ruby有这样一个hash:

{
  :key1 => 'value1',
  :key2 => 'value2',
  :key3 => {
    :key4 => [{:key4_1 => 'value4_1', :key4_2 => 'value4_2'}],
    :key5 => 'value5'
  },
  :key6 => {
    :key7 => [1,2,3],
    :key8 => {
      :key9 => 'value9'
    }
  }
}

在这个数据结构里,既存在hash结构,也存在数组结构。

递归迭代方法:

def iterate(h)
  h.each do |k,v|
    value = v || k

    if value.is_a?(Hash) || value.is_a?(Array)
      iterate(value)
    else
      puts v ? "key: #{k} value: #{v}" : "array value #{k}"
    end
  end