如何找到最长子阵列的大小?

时间:2017-07-14 14:32:29

标签: arrays ruby max

我正在使用Ruby 2.4。我有一个数组数组

arr = [[1, 8, 9, 10], [2, 3, 7], [0, 2, 15, 4, 27, 3], [2]]

如何找到所有子数组的最大元素数?例如,在上面,答案是6,因为第三个数组有6个元素,超过其他数组的元素数。

5 个答案:

答案 0 :(得分:5)

这很简单

arr.max_by(&:size).size
=> 6

答案 1 :(得分:3)

即使你不了解max_by,它也非常简单:

arr.map(&:size).max
#=> 6

答案 2 :(得分:1)

您可以在阵列上使用max_by

array.max_by { |i| i.length }.length

答案 3 :(得分:1)

假设:

> arr=[[1, 8, 9, 10], [2, 3, 7], [0, 2, 15, 4, 27, 3], [2]]

使用max_by

> arr.max_by {|l| l.length}
=> [0, 2, 15, 4, 27, 3]

或者,快捷方式:

> arr.max_by(&:length)
=> [0, 2, 15, 4, 27, 3]

如果你想要6 vs实际数组:

> arr.max_by {|l| l.length}.length
=> 6

答案 4 :(得分:1)

max_by是前往此处的方式,但您也可以使用max

arr.max { |a, b| a.size <=> b.size }.size
#=> 6

基准

require 'fruity'
arr = Array.new(10000) { |arr| Array.new(rand 10) }

compare do
  maxby_size  { arr.max_by(&:size).size }
  maxby_count { arr.max_by(&:count).count }
  map_max     { arr.map(&:size).max }
  max         { arr.max { |a,b| a.size <=> b.size }.size }
  reduce      { arr.reduce(0) { |memo, a| memo > a.length ? memo : a.length } }
end

#Running each test 2 times. Test will take about 1 second.
#map_max is faster than max by 2x ± 0.1
#max is similar to reduce
#reduce is similar to maxby_size
#maxby_size is similar to maxby_count