2016-07-06 58 views
1

我想获取未嵌套到数组中的每个键的值。从嵌套散列中按键选择所有值

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]

回答

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] 
+0

因为我认为这是错误的结果添加变量函数参数一些愚蠢的原因。它现在有效。 谢谢你的回答,祝你有美好的一天;) –