2016-07-06 15 views
1

Ich möchte die Werte jedes Schlüssels, der nicht in ein Array geschachtelt ist, erhalten.Wählen Sie alle Werte nach Schlüssel aus einem verschachtelten 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) 

Können Sie mir bitte sagen, was ich falsch mache?

wollte Ausgang [1,2,3], aber ich [1]

Antwort

2

In Ihrer Lösung, der innere list_to_array Methodenaufruf nicht das aktuelle Ergebnis Array nicht aktualisiert, so war es nicht richtig ist, aktualisiert. Ich habe einige mehr Sachen Refactoring, um es besser lesbar und Null-Werte

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

Für einige dumme Gründen ausschließen Ich dachte, dass es falsch wäre, Ergebnisse Variable hinzuzufügen Argumente zu funktionieren. Es funktioniert jetzt. Danke für die Antwort und einen schönen Tag;) –

Verwandte Themen