根据值对哈希键进行排名

时间:2012-06-19 02:41:14

标签: ruby

我正在尝试根据其值确定哈希中每个键与其他键的排名。值是数字。等级可以重复(即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

1 个答案:

答案 0 :(得分:0)

尝试一下:

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

我不确定它是否更漂亮,但它更紧​​凑,携带更少的循环变量,并且没有条件。