我想要一个方法在数组的所有元素相等且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"]
。
答案 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
因此,您将根据需要更改输入的值。