2010-11-27 30 views

回答

32

您可以使用all?来检查给定的谓词是否对于枚举中的所有元素都为真。所以:

hash.values.all? {|x| !x.nil?} 

或者

hash.all? {|k,v| !v.nil?} 

如果你还需要检查,所有的按键都非空,以及,你可以修改,为:

hash.all? {|k,v| !v.nil? && !k.nil?} 
+6

没有一个块`所有`自动检查,如果(阵列)单元都是非为零,所以值检查可以简化为`hash.values.all?`,而keys +值则检查为`hash.flatten.all?`! – 2010-11-27 18:57:37

+2

@glenn:不完全。它检查他们是真的。 “假”不是“无”,但它也不是真的。 – sepp2k 2010-11-27 19:03:09

2

Enumerable#all?方法呢正是你所需要的。

10

的另一种方法:

!hash.values.include? nil 
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 
相关问题