2010-11-27 9 views

risposta

32

È possibile utilizzare all? per verificare se un determinato predicato è vero per tutti gli elementi di una enumerazione. Quindi:

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

O

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

Se vuoi anche per verificare, tutti i tasti sono non-nil pure, è possibile modificare tale a:

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

Senza un blocco 'tutto' controlla automaticamente se gli elementi (Array) non sono pari a zero, in modo che il il controllo del valore può essere ridotto a 'hash.values.all?', e i tasti + valori controllano a 'hash.flatten.all?'! –

+2

@glenn: Non del tutto. Controlla che siano veri. 'false' non è' nil', ma non è neanche vero. – sepp2k

+0

Se sei su Ruby 1.8.7 o successivo, o su Rails, potresti fare '! hash.values.any? (&: nil?) '. –

2

Enumerable#all? metodo fa esattamente quello che ti serve.

10

altro modo:

!hash.values.include? nil 
+4

BTW, in Rails è ancora meglio: 'hash.values.exclude? quelle negative –

0

Elemento (valore) che è nil è definito. È definito come l'oggetto nil.

Se hai intenzione di verificare se c'è qualsiasi chiave mancante, quindi effettuare le seguenti operazioni:?

hash = {:key1 => nil, :key2 => 42, :key3 => false} 
keys = [:key1, :key2, :key3] 
all_defined = keys.all?{|key| hash.has_key?(key)} # Returns true 
Problemi correlati