Maybe a better data structure, but (I assume it is a ruby), this can be done in Ruby using the built-in sorting style to basically tell how to compare the two. Here is a concrete example:
my_hash = { 55 => {:value=>61, :rating=>-147}, 89 => {:value=>72, :rating=>-175}, 78 => {:value=>64, :rating=>-155}, 84 => {:value=>90, :rating=>-220}, 95 => {:value=>39, :rating=>-92}, 46 => {:value=>97, :rating=>-237}, 52 => {:value=>73, :rating=>-177}, 64 => {:value=>69, :rating=>-167}, 86 => {:value=>68, :rating=>-165}, 53 => {:value=>20, :rating=>-45} } puts "MY HASH" my_hash.each do |local| puts local end sorted_hash = my_hash.sort { | leftval, rightval | rightval[1][:rating]<=>leftval[1][:rating] } puts "SORTED HASH" sorted_hash.each do |local| puts local end
source share