我有一个对象数组,想要按照多个条件进行排序。大部分比较只需要使用它们的哈希值来执行
这个数组是足球队的数组,目前正在按以下方式进行排序:
然而,如果最后有两个或以上的团队在这三个领域上具有相同的价值,我希望使用我制作的函数a_beat_b(teamA,teamB)来解决平局问题。 我尝试使用Array.sort,但与sort_by相比,它非常缓慢...我的实现如下所示:
teams.sort(| a,b | [a.points,a.goals_dif,a.goals] <=> [b.points,b.goals_dif,b.goals])
对于points,goals_dif和goals的函数需要一些简单的查询,但是如果要进行数百次查询,则会陷入困境。 我不太擅长Ruby,所以不确定在哪里放置a_beats_b。 (它返回1、0或-1,如果A打败了B,则分别为平局或输给B)
<=>
操作,因此使用sort_by
非常快,但其中一个比较更为复杂。这个数组是足球队的数组,目前正在按以下方式进行排序:
teams.sort_by { |item| [item.points, item.goal_dif, item.goals] }
然而,如果最后有两个或以上的团队在这三个领域上具有相同的价值,我希望使用我制作的函数a_beat_b(teamA,teamB)来解决平局问题。 我尝试使用Array.sort,但与sort_by相比,它非常缓慢...我的实现如下所示:
teams.sort(| a,b | [a.points,a.goals_dif,a.goals] <=> [b.points,b.goals_dif,b.goals])
对于points,goals_dif和goals的函数需要一些简单的查询,但是如果要进行数百次查询,则会陷入困境。 我不太擅长Ruby,所以不确定在哪里放置a_beats_b。 (它返回1、0或-1,如果A打败了B,则分别为平局或输给B)
a_beat_b
实现是什么样子的?当你说“无法正确编写代码”时,你的意思是什么? - Matta_beat_b
类似于<=>
,如果 A 队在本次比赛中击败了 B 队,则返回1;如果是平局,则返回0;如果 B 赢了,则返回-1。Array.sort
的代码如下:teams.sort (|a,b| [a.points, a.goals_dif, a.goals] <=> [b.points, b.goals_dif, b.goals])
我不知道将我的函数放在哪里。 我会编辑进去的。 - AndreArray#sort
是正确的答案。你应该检查数组是否相同,然后有条件地使用a_beat_b
来执行更昂贵的比较。如果我们不知道你如何尝试实现Array#sort
,我们就无法真正帮助你。 - user229044points
,goals_dif
和goals
这些方法是否效率低下? - Stefan