如何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