我有一个数组a = [3,6,774,24,56,2,64,56,34]
。我需要使用Ruby在单次迭代中找到第二大数字。我如何实现它?
答案 0 :(得分:14)
简单:
array.sort[-2]
你已经完成了:)
答案 1 :(得分:2)
sort
在这里可能有些过分,特别是对于非常大的数组。不太明白“单次迭代”,你的意思是一行吗?
a = [3,6,774,24,56,2,64,56,34]
b = a.shift(2).sort
c =
a.inject(b) do |(m2, m), e|
case
when e > m
[m, e]
when e > m2
[e, m]
else
[m2, m]
end
end
c.first #=> 64
答案 2 :(得分:2)
这有效,但我不确定"单次迭代"
a.max(2)[1]
答案 3 :(得分:1)
只是为了好玩,这个方法在可枚举中得到第N个最大值(你使用bisect模块使插入acc
的效率更高)。正如@Victor所指出的那样,只有当数组的长度远大于n时,才会使用它,而另一个简单的array.sort[-n]
更快。
module Enumerable
def max_nth(n)
inject([]) do |acc, x|
(acc + [x]).sort[[acc.size-(n-1), 0].max..-1]
end.first
end
end
p [1, 5, 2, 32, 2, 41, 15, 55].max_nth(2) #=> 41
答案 4 :(得分:0)
它也有效:
arr.sort.reverse[1]
答案 5 :(得分:0)
对我来说,
a = [3,6,774,24,56,2,64,56,34]
a.uniq # create a new array with the only unique value
a.sort[-2] # find the second greatest value
答案 6 :(得分:0)
array = [1,2,3,4,5,6]
puts array.max(2).last