对三个或更多对象进行平等测试

bou*_*uby 2 ruby equality

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

a = 4
b = 4
c = 4
d = 2
Run Code Online (Sandbox Code Playgroud)

什么是一种干净的红宝石式的方式来确定它们是否都是平等的?在三个或更多元素上运行相等测试的任何定制方法?

我想我可以这样做:

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

这似乎有用,但感觉有点像火腿,其他开发人员可能很难阅读.

小智 6

[a,b,c,d].any?{|x| x != a}
Run Code Online (Sandbox Code Playgroud)

要么

array.any?{|x| x != array.first}
Run Code Online (Sandbox Code Playgroud)

或者,#all?方法可以更直观地阅读:

array.all? {|x| x == array.first }
Run Code Online (Sandbox Code Playgroud)


saw*_*awa 5

[a, b, c, d].group_by(&:itself).length == 1
# => false
Run Code Online (Sandbox Code Playgroud)

要么

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

要么

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

还是天真的:

[a, b, c, d].uniq.length == 1
Run Code Online (Sandbox Code Playgroud)

我被提醒了one?.如果您没有任何虚假元素,可以写上面的内容:

[a, b, c, d].uniq.length.one?
Run Code Online (Sandbox Code Playgroud)

  • 我特别喜欢最后一个.那和我见过的其他东西一样好 (2认同)