如何测试阵列中的所有项目是否相同?

时间:2010-07-13 00:15:33

标签: ruby arrays

我可以生成几行代码,但是我想知道是否有一个很好的干净Rubyesque方式来做到这一点。如果我还不清楚,我正在寻找的是一个数组方法,如果给出(例如)[3,3,3,3,3]["rabbits","rabbits","rabbits"],它将返回true,但是将返回false [1,2,3,4,5]["rabbits","rabbits","hares"]

由于

5 个答案:

答案 0 :(得分:73)

如果给定的块对集合中的所有元素都返回true,则可以使用Enumerable#all?返回true。

array.all? {|x| x == array[0]}

(如果数组为空,则永远不会调用该块,因此执行array[0]是安全的。)

答案 1 :(得分:62)

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。根据您的需要而定。

答案 2 :(得分:10)

我也喜欢最喜欢的答案,简短而甜蜜。如果所有元素都来自同一个Enumerable类,例如Numeric或String,则可以使用

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

答案 3 :(得分:2)

我以前用过:

array.reduce { |x,y| x == y ? x : nil }

array包含nil时可能会失败。

答案 4 :(得分:1)

我会用:

array = ["rabbits","rabbits","hares", nil, nil]
array.uniq.compact.length == 1