检查Ruby哈希中是否定义了所有对象(不是nil)的最佳方法是什么?
如果散列中至少有一个元素为nil,则该语句应返回false。
答案 0 :(得分:37)
您可以使用all?
检查给定谓词对于可枚举中的所有元素是否为真。所以:
hash.values.all? {|x| !x.nil?}
或者
hash.all? {|k,v| !v.nil?}
如果你还想检查,所有的密钥都是非零的,你可以修改为:
hash.all? {|k,v| !v.nil? && !k.nil?}
答案 1 :(得分:10)
另一种方式:
!hash.values.include? nil
答案 2 :(得分:2)
Enumerable#all?
方法完全符合您的需要。
答案 3 :(得分:0)
定义了nil
的元素(值)。它被定义为nil
对象。
如果您想检查是否缺少任何密钥,请执行以下操作:
hash = {:key1 => nil, :key2 => 42, :key3 => false}
keys = [:key1, :key2, :key3]
all_defined = keys.all?{|key| hash.has_key?(key)} # Returns true