【发布时间】:2017-06-13 13:36:12
【问题描述】:
我有一个包含评分、胜负和胜负百分比的玩家列表。我使用 sort_by 按评分排序,然后按输赢百分比,最后按获胜次数。但是,我还需要将排名相同的那些组合在一起。根据 ruby sort_by 文档here,排序块计算-1,0,+1。我需要根据排序算法对0 的结果进行分组。
然后我想将它们作为哈希返回,其中排名作为一个键,玩家作为另一个键。我将如何开始实现这一目标?
谢谢!
这是我目前拥有的代码,但我只是不知道如何将它们组合在一起。
# User.rb
def self.all_rankings
sorted_rankings = self.searchable.sort_by do |user|
[-user.rating, -user.all_wins_losses_as_decimal, -user.all_wins]
end
rank = 1
sorted_rankings.map.with_index(1) do |user, index|
{
"rank": index,
"user": user
}
end
end
编辑:这是所需 API 输出的示例。但是,我想将用户的等级分组在一起。因此,例如,我按照rating、all_wins_losses_as_decimal 和all_wins 的顺序进行排序。如果两个用户具有相同的rating、all_wins_losses_as_decimal 和all_wins,那么这两个用户应该具有相同的排名。
"users": [
{
"id": 560,
"name": "Aaron Rodgers",
"rank": 1,
"z_rating": 40,
"all_wins": 2,
"all_losses": 0,
"all_wins_losses_percentage": "1.000"
},
{
"id": 559,
"name": "Director Sports",
"rank": 2,
"z_rating": 40,
"all_wins": 1,
"all_losses": 0,
"all_wins_losses_percentage": "1.000"
},
{
"id": 571,
"name": "Alford Schamberger",
"rank": 3,
"z_rating": 40,
"all_wins": 1,
"all_losses": 1,
"all_wins_losses_percentage": ".500"
}
]
我正在考虑通过创建用户等级和用户对象的哈希来返回 z_rating、all_wins、all_losses 和 all_wins_losses_percentage。
rating 是User 模型的一个属性。 all_wins_losses_as_decimal 是 User 类上的一个方法,它返回 Float 类型。 all_wins 是 User 类的另一种方法,它返回 Int
【问题讨论】:
-
您想要的结果是什么样的?请编辑您的问题以包含一些示例输入和输出。
-
提示:当你说“我需要分组”时,你可能是指
group_by。这个问题很难用带有样本数据和预期结果的最小用例来回答。 -
嘿,很抱歉造成混乱。我已经添加了更多信息来解决问题。如果您需要更多信息,请与我们联系。谢谢!
标签: arrays ruby sorting hash grouping