From: William James Date: 2005-11-05T11:52:09+09:00 Subject: Re: How does one sort hash of hashes by multiple values? joe.yakich@gmail.com wrote: > Imagine I have this data structure: > > @my_hash[8858]['name'] = 'goober' > @my_hash[8858]['sort_date'] = 19991231 > > @my_hash[2004]['name'] = 'goober' > @my_hash[2004]['sort_date'] = '20010416' > > @my_hash[8872]['name'] = 'pyle' > @my_hash[8872]['sort_date'] = '20010416' > > @my_hash[89]['name'] = 'hogan' > @my_hash[89]['sort_date'] = '2004 0918' > > @my_hash[9]['name'] = 'homer' > @my_hash[9]['sort_date'] = '19980718' > > How does one sort it first by the name value, then by the sort_date > value? (So that the name == 'goober' items appear before the others, > and the very first element returned by the sort would be > @my_hash[8858]?) > > I tried searching a bit (the FAQ and google) , but came up empty; sorry > if this is a noob question. (Although, I am a ruby noob, so...) > > TIA! > > Joe require 'pp' my_hash = Hash.new { |hash, key| hash[key] = Hash.new } my_hash[8858]['name'] = 'goober' my_hash[8858]['sort_date'] = '19991231' my_hash[2004]['name'] = 'goober' my_hash[2004]['sort_date'] = '20010416' my_hash[8872]['name'] = 'pyle' my_hash[8872]['sort_date'] = '20010416' my_hash[89]['name'] = 'hogan' my_hash[89]['sort_date'] = '20040918' my_hash[9]['name'] = 'homer' my_hash[9]['sort_date'] = '19980718' pp my_hash.sort_by{|x| [ x.last['name'], x.last['sort_date'] ] } ----------------------------> [[8858, {"name"=>"goober", "sort_date"=>"19991231"}], [2004, {"name"=>"goober", "sort_date"=>"20010416"}], [89, {"name"=>"hogan", "sort_date"=>"20040918"}], [9, {"name"=>"homer", "sort_date"=>"19980718"}], [8872, {"name"=>"pyle", "sort_date"=>"20010416"}]]