Rubyハッシュのすべてのオブジェクトが定義されているかどうかを調べる最良の方法はありますか?ハッシュのすべての要素が定義されていることを確認する方法を教えてください。
ハッシュの少なくとも1つの要素がnilの場合、文はfalseを返す必要があります。
Rubyハッシュのすべてのオブジェクトが定義されているかどうかを調べる最良の方法はありますか?ハッシュのすべての要素が定義されていることを確認する方法を教えてください。
ハッシュの少なくとも1つの要素がnilの場合、文はfalseを返す必要があります。
all?
を使用すると、列挙可能な要素のすべての要素に対して特定の述語が真であるかどうかを確認できます。だから、:
hash.values.all? {|x| !x.nil?}
それとも
hash.all? {|k,v| !v.nil?}
あなたにもチェックしたい場合は、すべてのキーは、あなたがそれを修正することができ、同様に非nilのとおりです。
hash.all? {|k,v| !v.nil? && !k.nil?}
Enumerable#all?
方法はありませんまさにあなたが必要とするものです。
もう一つの方法:
!hash.values.include? nil
ところで、Railsではさらに優れています: 'hash.values.exclude?なし –
nil
あるが定義されている要素(値)。これはnil
オブジェクトとして定義されています。
あなたが不足している任意のキーがありますかどうかを確認したいとしている場合は、次の操作を行います?
hash = {:key1 => nil, :key2 => 42, :key3 => false}
keys = [:key1, :key2, :key3]
all_defined = keys.all?{|key| hash.has_key?(key)} # Returns true
ブロックがなければ、 ''すべてのように、(配列)の要素は、nil以外である場合に、自動的にチェックします値チェックは 'hash.values.all? 'に減らすことができ、キー+値は' hash.flatten.all?'にチェックします! –
@glenn:そうではありません。彼らは真実だとチェックします。 'false'は' nil'ではありませんが、それは真実ではありません。 – sepp2k
Ruby 1.8.7以降、またはRailsを使っているなら、 '! hash.values.any?(&:nil?) ' –