From: "David A. Black" Date: 2008-08-28T20:58:58+09:00 Subject: Re: Sort an array based on an attribute of its objects Hi -- On Thu, 28 Aug 2008, Joshua Muheim wrote: > Hi all > > The title of this topic is not very good, but I didn't really know how > to describe it in just a few words... > > So here is what I need to do: > > I have a array of some objects: > > [obj1, obj2, obj3, obj4] > > All objects have a method "status" that returns a status object, like > "open", "request", "cancelled", "completed" etc. > > Now I'd like to sort the elements after theses statuses into a new hash, > so in the end it should look something like this: > > {status1 => [obj1, obj3], > status3 => [obj2], > status4 => [obj4]} > > I need this because I want then to iterate through the hash and display > an HTML list grouped by status: > > > > What's an elegant way to do this? :-) In Ruby 1.9 you can do: array.group_by {|obj| obj.status } and get a hash. If you need to roll your own: class Array def group_by hash = Hash.new {|h,k| h[k] = [] } each {|e| hash[yield(e)] << e } hash end end (or in a module, or whatever). David -- Rails training from David A. Black and Ruby Power and Light: Intro to Ruby on Rails January 12-15 Fort Lauderdale, FL Advancing with Rails January 19-22 Fort Lauderdale, FL See http://www.rubypal.com for details and updates!