有没有办法使用! .include中的运算符?方法?

时间:2014-12-29 20:13:23

标签: ruby

我想编写一行代码来检查数组是否包含除0以外的任何内容。基本上这样:

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

写不起作用:

if not array.include(0)

因为我不想说“如果数组不包含零”。我试图说“如果数组包含任何不为零的东西。”

有什么建议吗?

4 个答案:

答案 0 :(得分:4)

您正在检查是否"并非所有值都为零。"这直接转化为ruby:

!array.all?(&:zero?)

示例:

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

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

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

答案 1 :(得分:3)

最简单的方法可能是#any?

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

如果数组中的任何值不为0,那么'将返回true。

答案 2 :(得分:1)

include?无法做到这一点。请改用Enumerable#any?

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

与你原来描述的“如果数组包含任何不为零的东西”的排列方式有多紧密相关?

答案 3 :(得分: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