2014-12-29 2 views
1

Я хочу написать строку кода, который проверяет, если массив содержит ничего, кроме 0. В основном это:Есть ли способ использовать! оператор внутри .include? метод?

if array.include?(! 0) == false 

Это не будет работать, чтобы написать:

if not array.include(0) 

Потому что я m не пытаюсь сказать «Если массив не содержит нуль». Я пытаюсь сказать «если массив содержит все, что не равно нулю».

Любые советы?

ответ

3

Самый простой способ сделать это, вероятно, #any?

array.any? {|e| e != 0 } 

Это будет возвращать истину, если какое-либо значение в массиве не равно 0.

1

Вы не можете сделать это с include?. Используйте Enumerable#any? вместо:

if array.any? {|x| x != 0} 

Разве не приятно, как близко, что линии с оригинальным описанием «если массив включает в себя все, что не равно нуль»?

4

Вы проверяете, не «ли все значения равны нулю». Это непосредственно приводит к рубина:

!array.all?(&:zero?) 

Примеры:

array = [] 
!array.all?(&:zero?) 
# => false 

array = [0] 
!array.all?(&:zero?) 
# => false 

array = [0,1] 
!array.all?(&:zero?) 
# => true 
+0

Это Стоит отметить, что '#any?' может работать быстрее, так как он завершит перечисление, как только найдет значение, соответствующее блоку, вместо того, чтобы проверять все значения в перечисляемом. –

+1

@ChrisHeald Не правда. Когда 'all? 'Находит ненулевое значение, он также завершается без проверки всех значений. – Matt

+1

Hah. Ты прав. Мне нужно больше кофе. –

0

предлагаю следующее.

Если вы хотите знать, если массив содержит ничего, кроме целого нуля:

def any_non_integer_zero?(a) 
    a.any? { |e| !e.is_a?(Integer) || e != 0 } 
end 

any_non_integer_zero? [0,  0]  #=> false 
any_non_integer_zero? [0.0, 0]  #=> true 
any_non_integer_zero? ['a', 0.0, 0] #=> true 
any_non_integer_zero? [0.1, 0.0, 0] #=> true 
any_non_integer_zero? [[0,0], 0.0, 0] #=> true 

Если вы хотите знать, если массив содержит ничего, кроме числа ноль:

def any_non_zero?(a) 
    a.any? { |e| !e.is_a?(Numeric) || e != 0.0 } 
end 

any_non_zero? [0,  0]  #=> false 
any_non_zero? [0.0, 0]  #=> false 
any_non_zero? ['a', 0.0, 0] #=> true 
any_non_zero? [0.1, 0.0, 0] #=> true 
any_non_zero? [[0,0], 0.0, 0] #=> true 
Смежные вопросы