是否有比下面更简单的方法来找到数组中最长的项目?
arr = [
[0,1,2],
[0,1,2,3],
[0,1,2,3,4],
[0,1,2,3]
]
longest_row = []
@rows.each { |row| longest_row = row if row.length > longest_row.length }
p longest_row # => [0,1,2,3,4]
答案 0 :(得分:19)
编辑:以前的版本有点不对,版本号不清楚
从Ruby版本1.9和1.8.7+开始,Enumerable#max_by
方法可用:
@rows = arr.max_by{|a| a.length}
max_by
为arr中的每个对象执行给定的块,然后返回具有最大结果的对象。
在这种简单的情况下,块只包含一个方法名称和一些可变噪声,实际上不需要显式块。可以使用Symbol#to_proc
方法并完全避免使用块变量,这样做:
@rows = arr.max_by(&:length)
早期版本的Ruby缺少#to_proc
和#max_by
方法。因此,我们需要明确地给出我们的实际比较并使用Enumerable#max
。
@rows = arr.max{|c1, c2| c1.length <=> c2.length}
感谢所有评论澄清。
答案 1 :(得分:1)
arr.inject {|最长,电流|最长的长度> current.length?最长的:当前的}
答案 2 :(得分:0)
您可以根据长度对数组进行排序,然后拉长时间。
sorted_rows = @rows.sort{|x,y| y.length<=>x.length}
longest_row = sorted_rows.first
效率不高,但它是另一种选择。如果您不想使用新数组并且不关心@rows数组中的排序,您可以使用排序!方法