1

我正在尝试根据其值确定哈希中每个键相对于其他键的排名。该值为数字。排名可以重复(即 3 个键可以并列第一名)。这有效,但很难看。

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 回答