[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Re: Array#group_by

Daniel Schierbeck

11/29/2006 6:17:00 PM

On Wed, 2006-11-29 at 22:55 +0900, Gareth Adams wrote:
> class Array
> # Groups elements of an array based on a user-defined condition
> #
> # Each element from this array is passed to the block, and the returned value
> # determines the key under which it will be stored in the output hash
> #
> # If no block is given then the array indices will be used as the hash keys
> def group_by
> hsh = {}
> self.dup.each_with_index do |element, i|
> if block_given?
> key = yield element
> else
> key = i
> end
> hsh[key] ||= []
> hsh[key] << element
> end
> hsh
> end
> end

Here's an improved version:

module Enumerable
def group_by
hsh = Hash.new{|hsh, key| hsh[key] = [] }
if block_given?
each{|obj| hsh[yield(obj)].push(obj) }
else
each_with_index{|obj, i| hsh[i].push(obj) }
end
hsh
end
end


Cheers,
Daniel Schierbeck