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

hash = { :a => 1 , :b => 20, :c => 4, :d => 12 }
hash.sort_by {|key,val| val }
=> [[:a, 1], [:c, 4], [:d, 12], [:b, 20]]

hash.sort_by {|key,val| val }.reverse
=> [[:b, 20], [:d, 12], [:c, 4], [:a, 1]]

hash.sort_by {|key,val| val }.reverse.each {|data| puts data[1] }
20
12
4
1

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

a = { :a => { :min => 12 , :max => 100} , :b => { :min => 120 , :max => 500} , :c => { :min => 40 , :max => 44} }

hash.sort_by {|key,val| val[:max] }
=> [[:c, {:min=>40, :max=>44}], [:a, {:min=>12, :max=>100}], [:b, {:min=>120, :max=>500}]]

hash.sort_by {|key,val| val[:max] }
=> [[:c, {:min=>40, :max=>44}], [:a, {:min=>12, :max=>100}], [:b, {:min=>120, :max=>500}]]

hash.sort_by {|key,val| val[:max] }.each {|data| puts data[1][:max]}
44
100
500