如何testing数组中的所有项目是否相同?
我可以生成几行代码,这将做到这一点,但我想知道是否有一个很好的干净的Rubyesque做这件事的方式。 如果我不清楚,我正在寻找的是一个数组方法,如果给出(例如) [3,3,3,3,3]
或["rabbits","rabbits","rabbits"]
但会[1,2,3,4,5]
或["rabbits","rabbits","hares"]
["rabbits","rabbits","rabbits"]
返回错误。
谢谢
class Array def same_values? self.uniq.length == 1 end end [1, 1, 1, 1].same_values? [1, 2, 3, 4].same_values?
这个如何? 它返回一个空数组为false,你可以将它改为<= 1,在这种情况下它将返回true。 取决于你需要什么。
你可以使用Enumerable#all?
如果给定的块对集合中的所有元素返回true,则返回true。
array.all? {|x| x == array[0]}
(如果数组是空的,块就不会被调用,所以array[0]
是安全的。)
我也喜欢最好的回答,简短而甜蜜。 如果所有元素都来自相同的Enumerable类,如Numeric或String,则可以使用
def all_equal?(array) array.max == array.min end
我曾经使用:
def add_equal?(arr) arr.reduce { |x,y| x == y ? x : nil } end
当arr
包含nil
时可能会失败。
我会用:
array = ["rabbits","rabbits","hares", nil, nil] array.uniq.compact.length == 1