Gareth Adams a ˝─rit :
> I posted this on the Rails list, but then I realised it would make more sense
> over here:
> 
> -------
> 
> Just thought I'd share a function which has been really useful to me, for 2 
> reasons
> 
> 1) It could easily help someone else
> 2) People might be able to make it work better or point out where it's not 
> optimal
> 
> 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


Hi,

thanks for the tip. I have q question with do you use a ".dup" on the 
line self.dup.each_with_index do |element, i| ? Facets has a similar 
function (partition_by), but don't use a ".dup" before iterating:

http://facets.rubyforge.org/api/core/classes/Enumerable.html#M000526

-- 
Bruno Michel