我想要寫一行,檢查代碼,如果一個數組包含比0。基本上,任何其他這樣的:有沒有辦法使用! .include中的運算符?方法?
if array.include?(! 0) == false
它不會工作寫:
if not array.include(0)
因爲我我不想說「如果數組不包含零」。我試圖說「如果數組包含任何不是零的東西。」
有什麼建議嗎?
我想要寫一行,檢查代碼,如果一個數組包含比0。基本上,任何其他這樣的:有沒有辦法使用! .include中的運算符?方法?
if array.include?(! 0) == false
它不會工作寫:
if not array.include(0)
因爲我我不想說「如果數組不包含零」。我試圖說「如果數組包含任何不是零的東西。」
有什麼建議嗎?
最直接的方式做到這一點可能是#any?
array.any? {|e| e != 0 }
如果陣列中的任何值不爲0
不能與include?
這樣做會返回true。使用Enumerable#any?
代替:
if array.any? {|x| x != 0}
是不是很高興,行了你原來的描述:「如果陣列包括任何不是零」多麼緊密?
您正在檢查是否「不是所有的值都是零」。這直接轉化爲紅寶石:
!array.all?(&:zero?)
例子:
array = []
!array.all?(&:zero?)
# => false
array = [0]
!array.all?(&:zero?)
# => false
array = [0,1]
!array.all?(&:zero?)
# => true
我建議如下。
如果你想知道如果數組包含大於整數零其他任何東西:
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
這是值得注意的是'#any?'可能運行得更快,因爲只要找到與塊匹配的值,它就會終止枚舉,而不必檢查枚舉中的所有值。 –
@ChrisHeald不正確。一旦'all?'發現一個非零值,它也會終止而不必檢查所有的值。 – Matt
哈。你是對的。我需要更多的咖啡。 –