1

その値に基づいて、他のキーに対するハッシュ内の各キーのランクを決定しようとしています。値は数値です。ランクは繰り返すことができます (つまり、3 つのキーが同点で 1 位になることができます)。これは機能しますが、醜いです。

standings.sort_by {|k, v| v}.reverse!
prev_k = nil
standings.each_with_index do |(k, v), i|
  if i == 0
    k.rank = 1
  elsif v == standings[prev_k]
    k.rank = prev_k.rank
  else
    k.rank = prev_k.rank + 1
  end
  prev_k = k
end
4

1 に答える 1

0

これを試してください:

ranks = Hash[standings.values.sort.uniq.reverse.each_with_index.to_a]
standings.each { |k, v| k.rank = ranks[v] + 1 }

よりきれいかどうかはわかりませんが、もう少しコンパクトで、ループ変数が少なく、条件文がありません。

于 2012-06-19T02:53:29.237 に答える