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