Qual è il modo migliore per verificare se tutti gli oggetti nell'hash Ruby sono definiti (non nulli)?Come posso confermare che tutti gli elementi in un hash sono definiti?
L'istruzione deve restituire false se almeno un elemento nell'hash è nullo.
Qual è il modo migliore per verificare se tutti gli oggetti nell'hash Ruby sono definiti (non nulli)?Come posso confermare che tutti gli elementi in un hash sono definiti?
L'istruzione deve restituire false se almeno un elemento nell'hash è nullo.
È 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?}
Enumerable#all?
metodo fa esattamente quello che ti serve.
altro modo:
!hash.values.include? nil
BTW, in Rails è ancora meglio: 'hash.values.exclude? quelle negative –
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
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?'! –
@glenn: Non del tutto. Controlla che siano veri. 'false' non è' nil', ma non è neanche vero. – sepp2k
Se sei su Ruby 1.8.7 o successivo, o su Rails, potresti fare '! hash.values.any? (&: nil?) '. –