From: "Marcel Molina Jr." Date: 2006-02-09T10:38:06+09:00 Subject: Re: can map/collect return fewer values than are found in the target? On Thu, Feb 09, 2006 at 10:18:46AM +0900, Kelly Dwight Felkins wrote: > Is there a way for collect to return fewer items than the enumerable the > collect is running on? It looks to me like > map/collect will return at least one value for each item in the array -- > I've seen examples of how to return more items, but > not less. > > Is there a way to do this more succinctly: > > VOWELS = %w{a e i o u} > items = %w{ a b c d e f g h i} > new_items = [] > items.each do |item| > new_items << item unless VOWELS.include(item) > end > new_items > > map/collect in ruby seems very similar to map in perl except that in perl > the block can return zero or more elements. Is there an method in ruby that > is similar to perl's map? Looks like you want Arry#select. In fact, take a look at the docs ;) ----------------------------------------------------------- Array#select array.select {|item| block } -> an_array ------------------------------------------------------------------------ Invokes the block passing in successive elements from _array_, returning an array containing those elements for which the block returns a true value (equivalent to +Enumerable#select+). a = %w{ a b c d e f } a.select {|v| v =~ /[aeiou]/} #=> ["a", "e"] marcel -- Marcel Molina Jr.