P
Patrick Gundlach
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
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