2016-07-06 4 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メソッド呼び出しは、現在の結果の配列を更新しませんので、それは正しく更新されていませんでした。 は、私はそれを読みやすくするために、私は引数を機能させる結果変数を追加するために間違っているだろうと思ったいくつかの愚かな理由からnilの値

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

を除外するために、いくつかのより多くのものをリファクタリングしました。それは今働く。 お返事ありがとうございます。 –

関連する問題