我对Ruby代码有点“问题”。我想检查数组中的所有元素是否相等。
例如,假设我有一个只有5的数组:
arr = [5, 5, 5, 5, 5]
我知道我可以做一些
arr[0] == arr[1] == arr[2] == arr[3] # == arr[4] == ...
但这对于大型数组来说是不可能的,而且在我看来也不是很像Ruby。我们可以通过这样做来改进它:
def all_equal?(arr)
for i in 0..(arr.size-2)
if arr[i] != arr[i+1] then
return false
end
end
true
end
但我也觉得这很难看。那么,有没有内置的/更好/更短(更像Ruby-esque)的方法来做到这一点?
TL;DR检查一个数组是否只包含一个不同的元素(例如:例如[5, 5, 5]
)?
谢谢。
7条答案
按热度按时间h43kikqp1#
你也可以使用
.uniq
,它返回一个没有重复的数组,并检查大小:gywdnpxw2#
有几种方法。
最好的一个:
并且:
并且:
还有:
如果它是一个可排序的数组,那么:
而且,只是为了多样性:
或者:
voj3qocg3#
使用Enumerable#each_cons:
wi3ka0sx4#
这在Ruby 3上是有效的。0+:
看起来很漂亮但可能不是最快的。
dbf7pr2w5#
对数组进行排序并将第一个值与最后一个值进行比较。
34gzjxbg6#
试试这个..
oxosxuxt7#
看起来,在以后的版本中,您可以直接将匹配的参数传递给
all?
,而不需要阻塞