From: Nobuyoshi Nakada Date: 2011-11-01T22:33:08+09:00 Subject: [ruby-core:40627] [ruby-trunk - Feature #5531] deep_value for dealing with nested hashes Issue #5531 has been updated by Nobuyoshi Nakada. =begin What about: class Hash def [](*keys) keys.inject(self) {|container, key| container.fetch(key) {return}} end end =end ---------------------------------------- Feature #5531: deep_value for dealing with nested hashes http://redmine.ruby-lang.org/issues/5531 Author: Kyle Peyton Status: Open Priority: Normal Assignee: Category: Target version: This feature request stems from dealing with nested hashes, like the params from a request often dealt with in web frameworks. Conditional code often needs to be written with multiple logical ANDs in order to achieve what this simple function can: class Hash def deep_value(*ks) if ks.size == 1 return self[ks.shift] else val = ks.shift return (self[val].is_a?(Hash) ? self[val].deep_value(*ks) : nil) end end alias dv deep_value end deep_value (dv) will simply recurse over a hash given a set of indexes and return the value at the end. Example: > foo = {:bar => {:baz => 'blah'}} > foo.dv(:bar, :baz) -> 'blah' > foo.dv(:cats) -> nil -- http://redmine.ruby-lang.org