Как я могу подтвердить, что все элементы хеша определены?
Каков наилучший способ проверить, определены ли все объекты в хеше Ruby (но нет)?
Оператор должен возвращать значение false, если хотя бы один элемент в хеш равен нулю.
Ответы
Ответ 1
Вы можете использовать all?
, чтобы проверить, является ли данный предикат истинным для всех элементов перечислимого. Итак:
hash.values.all? {|x| !x.nil?}
или
hash.all? {|k,v| !v.nil?}
Если вы также хотите проверить, все ключи не ноль, вы можете изменить это:
hash.all? {|k,v| !v.nil? && !k.nil?}
Ответ 2
Другой способ:
!hash.values.include? nil
Ответ 3
Enumerable#all?
делает именно то, что вам нужно.
Ответ 4
Определяется элемент (значение) nil
. Он определяется как объект nil
.
Если вы хотите проверить, отсутствуют ли какие-либо ключи, выполните следующие действия:
hash = {:key1 => nil, :key2 => 42, :key3 => false}
keys = [:key1, :key2, :key3]
all_defined = keys.all?{|key| hash.has_key?(key)} # Returns true