From: Frederick Ros Date: 2005-12-13T20:36:56+09:00 Subject: Re: stable sort_by? Patrick Gundlach wrote: > 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? Wouldn't this be simpler ? : h.sort_by {|k,v| [v[:a],v[:b],v[:c],v[:d]]}.reverse Best Regards, Fred -- Posted via http://www.ruby-forum.com/.