How to get “x[y][z]” out of a hash ?
This made life with our form helpers a lot easier, since they take normal or nested keys <-> name of the input and prefilled value through params.
Any alternative is appreciated, since its pretty complex/hacky, the name is weird too …
(a simple to_query.split(‘=’)).inject… can work too, but would stringify all values and keys)
Usage
{'x'=>{'y'=>{'z'=>1}}}.value_from_nested_key('x[y][z]') == 1
Code
class Hash # {'x'=>{'y'=>{'z'=>1}}.value_from_nested_key('x[y][z]') => 1 def value_from_nested_key(key) if key.to_s.include?('[') match, first, nesting = key.to_s.match(/(.+?)\[(.*)\]/).to_a value = self[first] nesting.split('][').each do |part| return nil unless value.is_a?(Hash) value = value[part] end value else self[key] end end end
I tried something like…
that will give me all keys of a given hash, and does nothing for an array?
what i am trying to do is getting the nested key ‘x[y][z]’ from a hash like {‘x’=>{‘y’=>{‘z’=>3}}}