From: David Alan Black Date: 2002-06-22T08:58:02+09:00 Subject: Re: Looking for the Ruby way for the following Hello -- On Sat, 22 Jun 2002, Austin Ziegler wrote: > On Sat, 22 Jun 2002 06:52:05 +0900, David Alan Black wrote: > > On Sat, 22 Jun 2002, Austin Ziegler wrote: > >> Why not use #inject()? It seems like it would be the natural > >> choice in this case. > > I confess I am #inject-ly challenged. Can you show how this would > > be done? > > I believe that it would be something like (adapted from the Pickaxe > book): > > file_list.inject(0) do > |fn_width, fn| fn_width = [File.basename(fn).size, fn_width].max > end > fn_width += 1; > > I suspect that the map solution you provided earlier is cleaner, and > you may need to do the appropriate #inject() mixin (p102 of the > Pickaxe book) if you don't have 1.7 (I think that's when #inject() > was added). You could wed the cleanness of #map to the #inject version -- you'd mainly just want to rewrite it so that you were using the return value of the call to #inject, rather than relying on the side-effect of fn_width being incremented. (Note that with the above version you'd also have to initialize fn_width beforehand.) So, you could do something like: biggest = file_list.inject(0) {|fn_width,fn| fn_width = [File.basename(fn).size,fn_width].max } + 1 David -- David Alan Black home: dblack@candle.superlink.net work: blackdav@shu.edu Web: http://pirate.shu.edu/~blackdav