从嵌套哈希中按键选择所有值

时间:2016-07-06 11:40:55

标签: arrays ruby loops hash

我想获取未嵌套到数组中的每个键的值。

lists = {'value'=>1, 'next'=>{'value'=>2, 'next'=>{'value'=>3, 'next'=>nil}}}

def list_to_array(h)
  result = []
  h.each_value {|value|
  value.is_a?(Hash) ? list_to_array(value) :
   result << value
 }
  result
end

p list_to_array(lists)

你能告诉我我做错了吗?

想要输出[1,2,3],但我得到[1]

1 个答案:

答案 0 :(得分:2)

在您的解决方案中,内部list_to_array方法调用不会更新当前结果数组,因此无法正确更新。 我已经重构了一些东西,以使其更具可读性并排除零值

lists = {'value'=>1, 'next'=>{'value'=>2, 'next'=>{'value'=>3, 'next'=>nil}}}

def list_to_array(h, results = [])
  h.each_value do |value|
    if value.is_a?(Hash)
      list_to_array(value, results)
    else
      results << value unless value.nil?
    end
  end

  results
end

p list_to_array(lists)

=> [1, 2, 3]