On Jan 21, 2008, at 2:07 PM, Max Williams wrote:

> Xavier Noria wrote:
>> On Jan 21, 2008, at 12:23 PM, Max Williams wrote:
>>
>>>
>>> Can anyone tell me a nice and simple way of doing this?
>>
>> Enumerable#parition or Set#classify might help.
>>
>> -- fxn
>
> hmmm...i couldn't work out how to make it easier with either of those.
> I ended up doing this, which isn't very clever but it did seem to  
> work.
>
> groups = []
> vals = collection.collect{|obj| [obj.val1, obj.val2]}.uniq!
> for val in vals
>  groups << collection.select{|obj| obj.val1 == val[0] && obj.val2 =
> val[1]

Note there is an assignment instead of an equals operator there.

>
> end

Yes, I think that's equivalent to

   collection.to_set.classify {|x| [x.foo, x.bar]}.values

plus perhaps a map to_a.

-- fxn