如果我有三个或更多这样的对象:
a = 4
b = 4
c = 4
d = 2
什么是干净的红宝石式的方式来确定它们是否都是平等的?在三个或更多元素上运行相等测试的任何定制方法?
我想我可以这样做:
arrays = [a,b,c,d].map{|x| [x]}
arrays.first == arrays.reduce(:&) ? true : false
似乎有效,但感觉有点像火腿,其他开发人员可能很难阅读。
答案 0 :(得分:6)
[a,b,c,d].any?{|x| x != a}
或
array.any?{|x| x != array.first}
或者,#all?对于某些人来说,方法可以更直观地阅读:
array.all? {|x| x == array.first }
答案 1 :(得分:5)
[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?
。如果您没有任何虚假元素,可以写上面的内容:
[a, b, c, d].uniq.length.one?
答案 2 :(得分:2)
我认为@kipar的答案一定比较好,但为了“以你开始的方式做”,我会在这里发布:
[a, b, c, d].reduce { |r, e| r == e && r } && true