On Tue, Jul 01, 2003 at 07:07:55PM +0900, Osuka wrote: > I'm Having some trouble sorting a hash!, the hash contents are like > this: > > 1 is Ayumi Hamasaki > 2 is Zone > 1 is Two-Mix > 2 is Shazna > 1 is L'arc~en~ciel I don't understand. Firstly, do you mean that your hash is like this: myhash = { 'Ayumi Hamasaki' => 1, 'Zone' => 2, 'Two-Mix' => 1, 'Shazna' => 2, 'L\'Arc~en~ciel' => 1, } Secondly, how do you want to sort it? If you just do myhash.sort then you will get it sorted alphabetically by the key, i.e. => [["Ayumi Hamasaki", 1], ["L'Arc~en~ciel", 1], ["Shazna", 2], ["Two-Mix", 1], ["Zone", 2]] If you want to sort it by the numeric value, then you can pass in an explicit block which shows how to compare the values: myhash.sort {|x,y| x[1] <=> y[1]} => [["Ayumi Hamasaki", 1], ["L'Arc~en~ciel", 1], ["Two-Mix", 1], ["Shazna", 2], ["Zone", 2]] (you can see all the 1's come before the 2's) Essentially the thing to remember is: when you sort a hash, it first gets converted to an array, where each element is a two-element array of [key,value] pairs. You can do this conversion yourself explicitly: myhash.to_a > Problem is: I want to ordered it in a descending order but using > Hash.invert I lose data 'cos there can't be several keys that are the > same, so any ideas of how to do this By descending order of what? Hash.invert doesn't reverse the order of elements, it swaps the keys and the values!! If you want a reverse alphabetical sort, try: myhash.sort.reverse => [["Zone", 2], ["Two-Mix", 1], ["Shazna", 2], ["L'Arc~en~ciel", 1], ["Ayumi Hamasaki", 1]] Regards, Brian.