Как подтвердить, что все элементы в хэше определены? - PullRequest
13 голосов
/ 27 ноября 2010

Каков наилучший способ проверить, все ли объекты в хэше Ruby определены (не ноль)?

Оператор должен возвращать false, если хотя бы один элемент в хэше равен nil.

Ответы [ 4 ]

37 голосов
/ 27 ноября 2010

Вы можете использовать all?, чтобы проверить, является ли данный предикат истинным для всех элементов перечислимого.Итак:

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

Или

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

Если вы также хотите проверить, все ключи также ненулевые, вы можете изменить это на:

hash.all? {|k,v| !v.nil? && !k.nil?}
10 голосов
/ 28 ноября 2010

Другой способ:

!hash.values.include? nil
2 голосов
/ 27 ноября 2010

Enumerable#all? метод делает именно то, что вам нужно.

0 голосов
/ 29 ноября 2010

Определен элемент (значение), равный nil.Он определен как объект nil.

Если вы хотите проверить, отсутствуют ли какие-либо ключи, выполните следующие действия:

hash = {:key1 => nil, :key2 => 42, :key3 => false}
keys = [:key1, :key2, :key3]
all_defined = keys.all?{|key| hash.has_key?(key)} # Returns true
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...