2012-02-14 6 views
1

配列の一部のハッシュがパスa.bまたは{"a"=>{"b"=>"someanswer"}}しか持っていないと仮定して、以下のコードをdieingせずに最後の要素を表示するのに十分なほど堅牢にするにはどうすればよいですか?Ruby:パスからのハッシュをより堅牢にする方法は?

path = ("a.b.c.d") 
arrayOfHashes.collect {|hash| path.split(".").inject(hash) { |hash, key| hash[key] }} 
+1

手元にある最後の要素を表示するか、 'a.b.c.d'を表示して到達できない場合は 'nil'を返しますか? –

+0

手元にある最後の要素 –

答えて

0

仕様が完全ではありません。そんな感じ?

arrayOfHashes = [{"a" => {"b" => "hello"}}, {"a" => {"b" => {"c" => {"d" => "response"}}}}] 
path = "a.b.c.d" 
arrayOfHashes.map do |hash| 
    path.split(".").inject(hash) do |acc, key| 
    acc.is_a?(Hash) ? acc[key] : acc 
    end 
end 
#=> ["hello", "response"] 
+0

申し訳ありません私は、nilを表示するのではなく、すべての場合に最後の要素を表示するつもりでした。 '#=> [" aa "、" response "]' –

+0

が更新されました。これでしょうか? – tokland

+0

パーフェクト、スマート、ありがとう! –