From: Bruno Michel Date: 2006-11-30T00:16:35+09:00 Subject: Re: Array#group_by Gareth Adams a �crit : > 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