From: Mike Austin Date: 2006-03-14T08:53:45+09:00 Subject: Re: array element access dblack@wobblini.net wrote: > Hi -- > > On Tue, 14 Mar 2006, Mike Austin wrote: > >> Tomas Fischer wrote: >>> Hi, >>> >>> I've got an array a= [1,2,3,4,5,6] and want to access each second >>> element: >>> b=[2,4,6]. How is this done in ruby? >>> >>> I know, that I can use a for-loob and modulo operator, but I think >>> there is a "ruby way" of doing this. >>> >>> Thanks. >>> tomas >> >> I've always been intrigued by creating a generalized enumeration >> system. Have you guys seen this: >> http://www.rubyweeklynews.org/20050710 : accessing index inside map. >> For example: >> >> (1..10).collect.with_index { |v, i| v * i } >> >> I think that is sweet! I wonder if it can be generalized enough to do >> this: >> >> file.collect.each_byte.with_index { |b, i| b + 1 } > > I'm not sure why, but to my eye this has always looked somewhat > obscure. I guess it's something about having to read to the right, > even to the extent of not seeing a block, before I know what's being > returned (array vs. enumerator). It's almost as if the call to > collect wasn't a "real" call to collect, but rather a kind of > place-holder for a collect operation. I'm not sure. Ok, what if you rearrange the order of the calls: file.each_byte.with_index.collect { |b, i| b + 1 } That's more left-to-right object-oriented sounding. Come to think of it I like this better because now collect is at the end, and that is the the final intent (with the block being next to it). Mike