我正在创建一个排名前5的排行榜,其中包含以下元素:
玩家名称
完成时间(完成游戏需要多长时间)
总移动次数
日期戳
为此,我创建了一个包含嵌套元组的元组数组,用于跟踪分钟、秒和毫秒,如下所示:
var leaderBoard: [(playerName: String, completionTime: (minutes: Int, seconds: Int, miliseconds: Int), totalMoves: Int, dateStamp: Date)] = []
当游戏完成时,这些值将附加到数组中,直到它总共包含5个元素。
我的问题是我需要按完成时间按升序对数组排序。由于此数组中元组的复杂嵌套性质,我似乎找不到有效的方法来完成此任务。如有任何帮助,将不胜感激。
最佳答案
排序函数很好地完成了这项工作。它接受一个闭包,该闭包比较数组中的两个项,如果第一个项小于第二个项,则返回true。
您只需要编写一个闭包,计算每个completionTime的值并进行比较。计算整数更快,因此下面将每个completionTime转换为整数毫秒并比较这些值:
let sortedPlayers = leaderBoard.sorted { lhs, rhs in
let lhTime = lhs.completionTime.minutes * 60_000 + lhs.completionTime.seconds * 1000 +
lhs.completionTime.miliseconds
let rhTime = rhs.completionTime.minutes * 60_000 + rhs.completionTime.seconds * 1000 +
rhs.completionTime.miliseconds
return lhTime < rhTime
}