2010-11-27 65 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 
相關問題