2016-07-06 43 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

因爲我認爲這是錯誤的結果添加變量函數參數一些愚蠢的原因。它現在有效。 謝謝你的回答,祝你有美好的一天;) –