Array#group_by

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

Gareth A. wrote:

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

This has already been done: Enumerable::group_by() that I believe is
shipping with Rails 1.2. (ActiveSupport:Enumeration). It appears that
others shared your train of thought… :slight_smile:

ilan