{"Win"=>3,-6ren">
gpt4 book ai didi

ruby - 如何使用 sort_by 方法根据输赢数据对球队进行排序

转载 作者:太空宇宙 更新时间:2023-11-03 17:52:20 33 4
gpt4 key购买 nike

我对如何使用 sort_by 方法感到困惑。我该如何重新排列:

@final_leaderboard = {
"Patriots" => {"Win"=>3, "Loss"=>0},
"Broncos" => {"Win"=>1, "Loss"=>1},
"Colts" => {"Win"=>0, "Loss"=>2},
"Steelers" => {"Win"=>0, "Loss"=>1},
}

产生这个:

Patriots  3   0
Broncos 1 1
Steelers 0 1
Colts 0 2

到目前为止,我有这段代码,但它被颠倒了,并且损失值不正确。我要做的是先按获胜条件排序。获胜次数最多的球队将排在@final_leaderboard 散列中的第一项,其次是野马队取得一场胜利,然后是钢人队和小马队。但是,我也想按损失排序。例如,我希望钢人队被列为@final_leaderboard 哈希中的第三项,因为它输了一场,而小马队输了两场。

@final_leaderboard = @final_leaderboard.sort_by do |key,value|
value["Loss"] <=> value["Win"]
end

上面的代码片段会产生这样的输出:

Patriots 3  0
Broncos 1 1
Colts 0 2
Steelers 0 1

最后两项不正确,但我不知道需要在代码片段中更改什么才能使钢人队和小马队逆转。我不熟悉 sort_by 方法,Ruby 文档上的 sort_by 方法示例/说明没有像其他方法那样的可视化示例,所以我不太确定如何使用它。如果有人可以向我解释如何对最后两项进行排序,我将不胜感激。谢谢。

最佳答案

此代码执行您所解释的内容:

@final_leaderboard.sort_by{|_, v| [-v["Win"], v["Loss"]]}

结果

[
["Patriots", {"Win" => 3, "Loss" => 0}],
["Broncos", {"Win" => 1, "Loss" => 1}],
["Steelers", {"Win" => 0, "Loss" => 1}],
["Colts", {"Win" => 0, "Loss" => 2}]
]

当您想像您的情况一样按多个条件排序时,您可以在 sort_by block 中使用数组。这里给出的 [-v["Win"], v["Loss"]] 指示首先通过比较每个哈希的 -v["Win"] 进行排序(其中v是hash),就是按照Win的降序排序,然后当有平局的时候,再看v["Loss"],即按照Loss的升序排序。

关于ruby - 如何使用 sort_by 方法根据输赢数据对球队进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22140594/

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