ネストされたハッシュからキーの値またはキーの存在を取得するにはどうすればよいですか?
例えば:
a = { "a"=> { "b" => 1, "c" => { "d" => 2, "e" => { "f" => 3 } }}, "g" => 4}
「f」の値を取得する直接的な方法はありますか? または、ネストされたハッシュにキーが存在することを知る方法はありますか?
ネストされたハッシュからキーの値またはキーの存在を取得するにはどうすればよいですか?
例えば:
a = { "a"=> { "b" => 1, "c" => { "d" => 2, "e" => { "f" => 3 } }}, "g" => 4}
「f」の値を取得する直接的な方法はありますか? または、ネストされたハッシュにキーが存在することを知る方法はありますか?
%w[a c e f].inject(a, &:fetch) # => 3
%w[a c e x].inject(a, &:fetch) # > Error key not found: "x"
%w[x].inject(a, &:fetch) # => Error key not found: "x"
または、エラーを回避するには:
%w[a c e f].inject(a, &:fetch) rescue "Key not found" # => 3
%w[a c e x].inject(a, &:fetch) rescue "Key not found" # => Key not found
%w[x].inject(a, &:fetch) rescue "Key not found" # => Key not found
def is_key_present?(hash, key)
return true if hash.has_key?(key)
hash.each do |k, v|
return true if v.kind_of?(Hash) and is_key_present?(v, key)
end
false
end
> is_key_present?(a, 'f')
=> true