2014-12-29 58 views
1

我想要寫一行,檢查代碼,如果一個數組包含比0。基本上,任何其他這樣的:有沒有辦法使用! .include中的運算符?方法?

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

它不會工作寫:

if not array.include(0) 

因爲我我不想說「如果數組不包含零」。我試圖說「如果數組包含任何不是零的東西。」

有什麼建議嗎?

回答

3

最直接的方式做到這一點可能是#any?

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

如果陣列中的任何值不爲0

1

不能與include?這樣做會返回true。使用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

哈。你是對的。我需要更多的咖啡。 –

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 
相關問題