From: Robert Klemme Date: 2011-03-04T23:06:28+09:00 Subject: Re: Extracting the shortest string from an array On Fri, Mar 4, 2011 at 11:36 AM, Josh Cheek wrote: > On Fri, Mar 4, 2011 at 4:11 AM, Robert Klemme wrote: > >> On Thu, Mar 3, 2011 at 7:18 PM, Josh Cheek wrote: >> > On Thu, Mar 3, 2011 at 11:35 AM, Robert Klemme >> > wrote: >> > >> >> On 03.03.2011 16:02, Thorsten Hater wrote: >> >> >> >>> in Ruby 1.9 this should work: >> >>> >> >>>    arr.sort_by(&:length)[0] >> >>> >> >> >> >> Inefficient as it creates a new array.  Better do >> >> >> >> irb(main):001:0> ["qwe", "qwerty"].min_by(&:length) >> >> => "qwe" >> >> >> >> >> >>  or more portable/readable (1.8 compatible): >> >>> >> >>>    arr.sort_by{|s| s.length }[0] >> >>> >> >> >> >> Inefficient as well (see above). >> >> > They're also O( n lg n ) where the correct solution, using min, is O(n) > Right. This was my point: using min is O(n), using sort is O(n lg n) OK, now I get what you mean. You were referring to the sorts. That wasn't clear to me. >> Also, big O isn't everything.  Usually object allocation is very >> expensive (compared to other operations) because of the GC >> housekeeping overhead. >> > I don't contest this. I was pointing out that in addition to creating more > objects, as you previously mentioned, using sort also has a worse time > complexity. Yep, sorry for the noise. Cheers robert -- remember.guy do |as, often| as.you_can - without end http://blog.rubybestpractices.com/