【发布时间】:2019-04-15 09:05:40
【问题描述】:
我有一个需要排序的 LeagueTeam 数组。一个联赛球队有通常的东西,points,shotsFor,shotsAgainst,totalShots 等。联赛将有一个 LeagueSortOptions 数组,例如 [.points, .shots, .shotsFor]。这将按分数排序,然后按总投篮次数,然后按投篮次数排序。
leagueSortOptions 由用户在创建联赛时创建,因此可以根据用户的需要以任何顺序排列,例如。
[.points, .shots, .shotsFor]
[.shots, .shotsFor]
[.shotsFor, .points]
我可能需要添加更多的排序选项,所以我觉得需要某种递归,而不是为每个可能的排列创建一个函数。但是我就是无法绕开它,现在已经转了几个小时了。任何帮助或正确方向的指针将不胜感激,谢谢:)
enum LeagueSortOptions: String, Codable {
case points = "Points", shots = "Shots", shotsFor = "Shots For"
}
struct LeagueTeam : Codable {
var name: String
var gamesPlayed: Int
var gamesWon: Int
var gamesLost: Int
var gamesDrawn: Int
var shots: Int
var points: Int
var shotsFor: Int
var shotsAgainst: Int
}
我目前使用此代码按点排序,然后按shotFor,但这仅说明一种排列,这可能是最常见的:
teams.sort { (team1, team2) -> Bool in
if team1.points == team2.points {
if team1.shots > team2.shots { return true } else { return false }
}
if team1.points > team2.points { return true } else { return false }
}
【问题讨论】:
-
您可以使用 KeyPath,但您需要从枚举到要排序的属性的 KeyPath 的映射。
-
在这里查看答案。我认为它可以帮助你stackoverflow.com/questions/43056807/…
-
teams.sort { (team1, team2) -> Bool in if team1.points == team2.points { if team1.shots > team2.shots { return true } else { return false } } if team1.points > team2.points { return true } else { return false } }
-
我刚才用它来按点排序,然后按镜头排序,这可能是最常见的,它工作得很好,但只是一种排列。感谢您的回复,我现在将查看这些内容:)
标签: swift