La class Hash possède une méthode fort pratique pour le tri de Hash : sort_by.

 1hash = { :a => 1 , :b => 20, :c => 4, :d => 12 }
 2hash.sort_by {|key,val| val }
 3=> [[:a, 1], [:c, 4], [:d, 12], [:b, 20]]
 4
 5hash.sort_by {|key,val| val }.reverse
 6=> [[:b, 20], [:d, 12], [:c, 4], [:a, 1]]
 7
 8hash.sort_by {|key,val| val }.reverse.each {|data| puts data[1] }
 920
1012
114
121

Maintenant regardons ce que l’on peut faire sur un “objet” plus complexe :

 1a = { :a => { :min => 12 , :max => 100} , :b => { :min => 120 , :max => 500} , :c => { :min => 40 , :max => 44} }
 2
 3hash.sort_by {|key,val| val[:max] }
 4=> [[:c, {:min=>40, :max=>44}], [:a, {:min=>12, :max=>100}], [:b, {:min=>120, :max=>500}]]
 5
 6hash.sort_by {|key,val| val[:max] }
 7=> [[:c, {:min=>40, :max=>44}], [:a, {:min=>12, :max=>100}], [:b, {:min=>120, :max=>500}]]
 8
 9hash.sort_by {|key,val| val[:max] }.each {|data| puts data[1][:max]}
1044
11100
12500