确定是否最简洁的方法是什么@hash[:key1][:key2]
已定义,如果@hash
or @hash[:key1]
为零?
defined?(@hash[:key1][:key2])
返回 True 如果@hash[:key1]
存在(不判断是否:key2
被定义为)
当使用 ActiveSupport (Rails) 或 Backports 时,您可以使用try
:
@hash[:key1].try(:fetch, :key2)
你甚至可以处理@hash
being nil
:
@hash.try(:fetch, :key1).try(:fetch, :key2)
如果你想@hash
始终返回缺失键的哈希值:
@hash = Hash.new { |h,k| h[k] = {} }
@hash[:foo] # => {}
您还可以定义此递归:
def recursive_hash
Hash.new { |h,k| h[k] = recursive_hash }
end
@hash = recursive_hash
@hash[:foo][:bar][:blah] = 10
@hash # => {:foo => {:bar => {:blah => 10}}}
但回答你的问题:
module HasNestedKey
Hash.send(:include, self)
def has_nested_key?(*args)
return false unless sub = self[args.shift]
return true if args.empty?
sub.respond_to?(:has_nested_key?) and sub.has_nested_key?(*args)
end
end
@hash.has_nested_key? :key1, :key2
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)