Hi,

I have to sort a list using a number of criterions (a,b,c,d) where d

is the least important criterion and a is the most important one. All

comparisons should be ‘higher number: better position’. This is what I

have tried:

require ‘pp’

h= {“Team A”=>{:a=>3, :b=>2, :c=>6, :d=>114 },

“Team B”=>{:a=>0, :b=>-2, :c=>4, :d=>112 },

“Team C”=>{:a=>3, :b=>4, :c=>4, :d=>110 },

“Team D”=>{:a=>3, :b=>4, :c=>4, :d=>108 },

}

tmp=h.to_a

[:d,:c,:b,:a].each do |criterion|

tmp=tmp.sort_by { |a| a[1][criterion] }.reverse

end

pp tmp

[[“Team D”, {:d=>108, :a=>3, :b=>4, :c=>4}],

[“Team C”, {:d=>110, :a=>3, :b=>4, :c=>4}],

[“Team A”, {:d=>114, :a=>3, :b=>2, :c=>6}],

[“Team B”, {:d=>112, :a=>0, :b=>-2, :c=>4}]]

but as far as I can see ‘Team C’ should be better than ‘Team D’,

because of criterion d. Is it possible that sort_by is not stable? Or

is there something I did wrong?

Patrick