On 01.05.2007 00:03, Robert Dober wrote:
> On 4/30/07, Robert Klemme <shortcutter / googlemail.com> wrote:
> <snip>
>> >>
>> >> def longest
>> >>    lg = Hash.new {|h,k| h[k] = []}
>> >>    each {|x| lg[x.size] << x}
>> >>    lg.sort_by {|k,v| k}.last.pop
>> >> end
>> > good idea but I wanted inject :)
>> >> <snip>
>>
>> That's an easy transformation (left as exercise for the reader, bonus
>> points for a one liner). :-)
> 
> inject( Hash.new{ |h,k| h[k]=[]} ){|h,e| h[e.size] << e}.sort_by....
                                                       ^^^^
The return from the block is missing. :-)

> as this is not readable anymore let me golf a little bit
> 
> inject([]){|a,e| a[e.size] = (a[e.size]||[])+[e];a}.last
> hmm that is not too bad ;)

Couldn't you just use ||= here?

inject([]){|a,e|(a[e.size]||=[])<<e;a}.last

I like your idea to use the length as array index - that way no sorting 
is needed.  Brilliant!

Kind regards

	robert