给定具有n级嵌套值的哈希,字段名称和路径
contact = { "Email" => "bob@bob.com","Account" => { "Exchange" => true,"Gmail" => false,"Team" => { "Closing_Sales" => "Bob Troy","Record" => 1234 } } } field = "Record" path = ["Account","Team"] #Must support arbitrary path length
def get_value(hash,field,path) ? end get_value(contact,"Record",["Account","Team"]) => 1234
解决方法
让我们将“字段”视为“路径”的最后一个元素.那就简单了
def grab_it(h,path) h.dig(*path) end grab_it contact,"Team","Record"] #=> 1234 grab_it contact,"Rabbit"] #=> nil grab_it(contact,"Team"] # => {"Closing_Sales"=>"Bob Troy","Record"=>1234} grab_it contact,["Account"] #=> {"Exchange"=>true,"Gmail"=>false,"Team"=>{"Closing_Sales"=>"Bob Troy",# "Record"=>1234}}