From: Wayne Simmerson Date: 2012-10-20T08:12:16+09:00 Subject: Hash with Integer key issue Hi Im new to Ruby and am getting some unexpected results from a dynamically created Hash. The following from irb is my attempt to troubleshoot why its not working. irb(main):028:0> x = Hash.new => {} # Dynamically build the hash, works. irb(main):029:0> (1..49).each { |y| x[y] = y-2 } => 1..49 irb(main):030:0> x => {1=>-1, 2=>0, 3=>1, 4=>2, 5=>3, 6=>4, 7=>5, 8=>6, 9=>7, 10=>8, 11=>9, 12=>10, 13=>11, 14=>12, 15=>13, 16=>14, 17=>15, 18=>16, 19=>17, 20=>18, 21=>19, 22=>20, 23=>21, 24=>22, 25=>23, 26=>24, 27=>25, 28=>26, 29=>27, 30=>28, 31=>29, 32=>30, 33=>31, 34=>32, 35=>33, 36=>34, 37=>35, 38=>36, 39=>37, 40=>38, 41=>39, 42=>40, 43=>41, 44=>42, 45=>43, 46=>44, 47=>45, 48=>46, 49=>47} # Gives the result I expect irb(main):031:0> x[46] => 44 # Sort by the value... irb(main):032:0> x = x.sort_by {|k,v| v}.reverse => [[49, 47], [48, 46], [47, 45], [46, 44], [45, 43], [44, 42], [43, 41], [42, 40], [41, 39], [40, 38], [39, 37], [38, 36], [37, 35], [36, 34], [35, 33], [34, 32], [33, 31], [32, 30], [31, 29], [30, 28], [29, 27], [28, 26], [27, 25], [26, 24], [25, 23], [24, 22], [23, 21], [22, 20], [21, 19], [20, 18], [19, 17], [18, 16], [17, 15], [16, 14], [15, 13], [14, 12], [13, 11], [12, 10], [11, 9], [10, 8], [9, 7], [8, 6], [7, 5], [6, 4], [5, 3], [4, 2], [3, 1], [2, 0], [1, -1]] # And here is the problem! Now that I am looking at it here, it's obvious that the sort is flattening the Hash... Is there a way to restore it to a Hash, or a better way to achieve the sort? irb(main):033:0> x[46] => [3, 1] I'm sure I'm over looking something simple. Please help, I need the sorted Hash to give me the appropriate value for the Integer key... -- Posted via http://www.ruby-forum.com/.