Edit: previous versions were slightly incorrect and unclear regarding version numbers
Starting with versions of Ruby 1.9 and 1.8.7+, the Enumerable#max_by method is available:
@rows = arr.max_by{|a| a.length}
max_by executes the given block for each object in arr and then returns the object that had the greatest result.
In simple cases like this, when a block consists of only one method name and some variable noise, there is really no need for an explicit block. You can use the Symbol#to_proc and completely exclude the block variable by doing this:
@rows = arr.max_by(&:length)
Earlier versions of Ruby lacked the #to_proc and #max_by . Therefore, we need to explicitly give our actual comparison and use Enumerable#max .
@rows = arr.max{|c1, c2| c1.length <=> c2.length}
Thanks to all comments for clarification.
source share