我目前正在使用Swift开发一个软件项目,它需要几种不同类型的排序机制。我一直在搜索,但没有结果,我一直在寻找一种算法来处理打破领带的问题。换句话说,假设您有一个数据集,可以这样表示:
[Name Of Data]:[Someone's ID]-[Same Someone's Score],[Someone's ID]-[Same Someone's Score],[etc...]\n
[Name Of Data]:[Someone's ID]-[Same Someone's Score],[Someone's ID]-[Same Someone's Score],[etc...]\n
[etc...]那么,有一行可能是这样的:
Wins:7-1,8-1,9-1,2-1,10-1,3-0,4-0,5-0,1-0,6-0另一个看起来是这样的:
SpeakerPoints:6-26,2-20,4-19,7-17,8-16,9-16,5-16,1-12,3-11,10-8我希望能够按照“胜利者”对in进行排序,其中“胜利者”标准是第一位的,如果有平分,程序将移到“SpeakerPoints”标准,等等……
通常,我会使用特定于平台的机制(比如LINQ用于Windows,NSSortDescriptor用于MacOS)。然而,该项目是“共享代码”,应该在任何必要的平台上编译。如果有关系的话,我使用的是Silver,这是苹果Swift的一个实现,用于编译Windows/MacOS/iOS/Android/等等.目标,所以我基本上只限于使用“纯迅捷”(纯粹的斯威夫特代码工作非常好)。我如何实现一种类型来做到这一点呢?我不关心算法是否高效(虽然我也不希望一个简单的排序需要几个小时,我自己也可以这样做:P),只要它返回正确排序的ID,修改后的气泡排序就可以了。
复杂的是,标准的数量也是一个变量:这一次可能是wins和speakerPoints,但下一次可能包括opponentWins。
发布于 2016-08-11 14:14:30
在实现排序算法时,只需创建一个返回大于、等于或小于给定两个输入的函数。你不需要担心胜利+说话人点+任何东西的绝对值。
因此,使用或创建一个只使用注入的任意排序算法(例如,气泡排序):
IComparer
{
Int Compare(x, y); // return 1,0,-1
}然后,您可以编写一个具体的实现与所需,比较胜利,比较说话人点等。
在注入一个IComparers数组时,您可以想象更多的天才解决方案。但最好还是让它简单一点。
https://softwareengineering.stackexchange.com/questions/328142
复制相似问题