三个或更多对象的相等测试

Equality test on three or more objects

如果我有三个或更多这样的对象:

a = 4
b = 4
c = 4
d = 2

什么是干净的 ruby 风格的方法来确定它们是否都相等? 运行 对三个或更多元素进行相等性测试的任何定制方法?

我想我可以这样做:

arrays = [a,b,c,d].map{|x| [x]}
arrays.first == arrays.reduce(:&) ? true : false

这看起来可行,但感觉有点笨拙,其他开发人员可能难以阅读。

[a,b,c,d].any?{|x| x != a}

array.any?{|x| x != array.first}

或者,#all?对于某些人来说,方法可能更直观:

array.all? {|x| x == array.first }

我认为@kipar 的回答无论如何都更好,但为了“按照你开始的方式去做”,我会 post 在这里:

[a, b, c, d].reduce { |r, e| r == e && r } && true
[a, b, c, d].group_by(&:itself).length == 1
# => false

[a, b, c, d].chunk(&:itself).to_a.length == 1
# => false

[a, b, c, d].chunk_while(&:==).to_a.length == 1
# => false

或者天真:

[a, b, c, d].uniq.length == 1

我想起了 one?。前提是你没有任何falsy元素,上面可以写成:

[a, b, c, d].uniq.length.one?