我正在尝试根据其值确定哈希中每个键与其他键的排名。值是数字。等级可以重复(即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
答案 0 :(得分:0)
尝试一下:
ranks = Hash[standings.values.sort.uniq.reverse.each_with_index.to_a]
standings.each { |k, v| k.rank = ranks[v] + 1 }
我不确定它是否更漂亮,但它更紧凑,携带更少的循环变量,并且没有条件。