我有一个数组a = [3,6,774,24,56,2,64,56,34]。我需要用Ruby在一次迭代中找到第二大的数。我该如何实现呢?
a = [3,6,774,24,56,2,64,56,34]
6kkfgxo01#
简单:
array.sort[-2]
你已经完成了:)
mznpcxlj2#
这是可行的,但我不确定是否适用于“单次迭代”a.max(2)[1]
a.max(2)[1]
pgvzfuti3#
sort在这里可能有点过头了,尤其是对于非常大的数组。不太理解“单次迭代”,你是指一行吗?
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
vnzz0bqm4#
只是为了好玩,这个方法会得到一个可枚举对象中第N个最大的值(你可以使用一个bisect模块来提高插入acc的效率),正如@维克托所指出的,只有当数组的长度远远大于n时才可以使用它,否则简单的array.sort[-n]会更快。
acc
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
bfrts1fy5#
它也很有效:
arr.sort.reverse[1]
a6b3iqyw6#
对我来说,
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
flvtvl507#
array = [1,2,3,4,5,6] puts array.max(2).last
ifsvaxew8#
对我来说,这很管用:data_array5 = [45,65632,232,34345,343,23,23,56]puts data_array5.sort[data_array5.length()-2]这是通用的,你可以用任意n个数字替换2来得到第n个最大值
data_array5 = [45,65632,232,34345,343,23,23,56]
puts data_array5.sort[data_array5.length()-2]
8条答案
按热度按时间6kkfgxo01#
简单:
你已经完成了:)
mznpcxlj2#
这是可行的,但我不确定是否适用于“单次迭代”
a.max(2)[1]
pgvzfuti3#
sort
在这里可能有点过头了,尤其是对于非常大的数组。不太理解“单次迭代”,你是指一行吗?vnzz0bqm4#
只是为了好玩,这个方法会得到一个可枚举对象中第N个最大的值(你可以使用一个bisect模块来提高插入
acc
的效率),正如@维克托所指出的,只有当数组的长度远远大于n时才可以使用它,否则简单的array.sort[-n]
会更快。bfrts1fy5#
它也很有效:
a6b3iqyw6#
对我来说,
flvtvl507#
ifsvaxew8#
对我来说,这很管用:
data_array5 = [45,65632,232,34345,343,23,23,56]
puts data_array5.sort[data_array5.length()-2]
这是通用的,你可以用任意n个数字替换2来得到第n个最大值