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