2010-11-27 11 views

答えて

32

all?を使用すると、列挙可能な要素のすべての要素に対して特定の述語が真であるかどうかを確認できます。だから、:

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

それとも

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

あなたにもチェックしたい場合は、すべてのキーは、あなたがそれを修正することができ、同様に非nilのとおりです。

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

ブロックがなければ、 ''すべてのように、(配列)の要素は、nil以外である場合に、自動的にチェックします値チェックは 'hash.values.all? 'に減らすことができ、キー+値は' hash.flatten.all?'にチェックします! –

+2

@glenn:そうではありません。彼らは真実だとチェックします。 'false'は' nil'ではありませんが、それは真実ではありません。 – sepp2k

+0

Ruby 1.8.7以降、またはRailsを使っているなら、 '! hash.values.any?(&:nil?) ' –

2

Enumerable#all?方法はありませんまさにあなたが必要とするものです。

10

もう一つの方法:

!hash.values.include? nil 
+4

ところで、Railsではさらに優れています: 'hash.values.exclude?なし –

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 
関連する問題