如何检查数组的所有元素是否具有特定值?

时间:2016-04-14 07:05:42

标签: arrays ruby

我想要一个方法在数组的所有元素相等且true时返回"yes"。我有一个数组["yes", "yes", "yes"]。它的所有元素都是相同的"yes"。我希望它返回true。对于["no", "no", "no"],虽然所有元素都是"no",但该值不等于"yes"。我怎么能这样做?

我正在使用此方法来检查:

def self.all_equal?(array) array.max == array.min end

但它会为true返回["no", "no", "no"]

5 个答案:

答案 0 :(得分:4)

def self.all_equal_to_yes? array
   array.all? { |x| x == "yes" }
end

请注意,这将为空数组返回true。如果您希望在这种情况下返回false,请使用FixerRB的答案。我还使用了名称all_equal_to_yes?,因为这使得该方法比all_equal?更明确。您还可以定义更通用的方法:

def self.all_equal_to?(array, value)
    array.all? { |x| x == value
end

然后能够这样称呼它:

$ Foo.all_equal_to? ["no", "no", "no"], "yes"
#=> false
$ Foo.all_equal_to? ["no", "no", "no"], "no"
#=> true

(将Foo替换为您在其上定义此方法的任何类别

答案 1 :(得分:3)

这可以解决您的问题:

def self.all_equal?(array) 
  array.uniq == ['yes'] 
end

答案 2 :(得分:1)

["yes", "yes", "yes"].grep_v("yes").empty? # => true
["no", "yes", "yes"] .grep_v("yes").empty? # => false
["no", "no", "no"]   .grep_v("yes").empty? # => false

答案 3 :(得分:0)

当前方法只检查数组的所有元素是否相等。如果您还要检查它们是否都等于"yes",则需要为此添加显式检查。由于它们都是平等的,所以检查其中一个确实是"yes"

就足够了
def self.all_equal?(array) array.max == array.min && array[0] == "yes" end

答案 4 :(得分:0)

我知道这是几年前的事,但是我偶然发现了这个问题,以为我分享了最近学到的东西:

value = "yes"
array.all?(value)  #=> returns true

因此,您将根据需要更改输入的值。