gpt4 book ai didi

ruby - 如何在避免被零除的同时按比率排序?

转载 作者:数据小太阳 更新时间:2023-10-29 08:23:55 24 4
gpt4 key购买 nike

考虑一个类 Team,类变量为“wins”和“loss”。我希望按胜负比对一组团队进行排序,这样:

5:0 > 3:0 > 1:0 > 3:1 > 5:5 > 3:3 > 1:3 > 0:1 > 0:3 > 0:5

我已经有了一个(部分)拼凑的解决方案,我对此并不满意,我想知道是否有更清洁/更优雅/更简单的方法来解决这个问题。

def ratio
if @losses == 0 then
return 1000000+@wins
end
if @wins == 0 then
return 0-@losses
end
return @wins/@losses
end

(这不能解决 5:5 > 3:3)

这将在 Team 类中并且可以像这样使用:

teams.sort! { |a, b| b.ratio <=> a.ratio }

解决这个问题最简单的方法是什么? (解决方案不一定是 Ruby,我对任何面向对象的东西都很满意)

最佳答案

我不会说 Ruby,但是可以提供您想要的结果的 Python 方法会使用元组作为键(在 decorate-sort-undecorate “Schwartzian transform”惯用语中。)

例如,您可以按获胜分数排名,然后是获胜次数,然后是(负)失败次数,这将给出您想要的顺序:

>>> wl = [[3, 0], [3, 1], [0, 5], [3, 3], [0, 3], [5, 5], [1, 3], [5, 0]]
>>>
>>> def rank(wl):
... win, loss = wl
... return (1.0*win/(win+loss) if win+loss > 0 else 0), win, -loss
...
>>> sorted(wl, key=rank)
[[0, 5], [0, 3], [1, 3], [3, 3], [5, 5], [3, 1], [3, 0], [5, 0]]
>>> sorted(wl, key=rank)[::-1]
[[5, 0], [3, 0], [3, 1], [5, 5], [3, 3], [1, 3], [0, 3], [0, 5]]

不幸的是,我不知道 Ruby 的等价物是什么,但我收集到有一个 sort_by 方法在某处 float 。

关于ruby - 如何在避免被零除的同时按比率排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14530264/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com