gpt4 book ai didi

arrays - 使用嵌套元组对数组进行排序

转载 作者:行者123 更新时间:2023-11-28 11:47:08 26 4
gpt4 key购买 nike

我正在创建包含以下元素的前 5 名排行榜:

Player Name

Completion Time (how long it took to complete the game)

Total Moves

Date Stamp

为此,我创建了一个包含嵌套元组的元组数组来跟踪分、秒和毫秒,如下所示:

var leaderBoard: [(playerName: String, completionTime: (minutes: Int, seconds: Int, miliseconds: Int), totalMoves: Int, dateStamp: Date)] = []

游戏完成后,这些值将附加到数组,直到它总共包含 5 个元素。

我的麻烦是我需要按完成时间升序对这个数组进行排序。由于此数组中元组的复杂嵌套性质,我似乎无法找到实现此目的的有效方法。如有任何帮助,我们将不胜感激。

最佳答案

如果您的 completionTime格式正确( seconds0...59 中, milliseconds0...999 中),那么您可以对 leaderboard 进行排序与:

leaderBoard.sort { $0.completionTime < $1.completionTime }

这是有效的,因为 Swift 可以比较 2 个元组 (1, 2, 3)(1, 2, 4)<它将比较第一项,如果它们相等,它将比较第二项,如果它们相等,它将比较第三项。所以你可以用一个简单的 < 来订购它们比较。即使项目被标记,只要两个元组具有相同数量的元素,元素数量不超过 6,并且相应元素的类型匹配,这也是有效的。


示例:

var leaderBoard: [(playerName: String, completionTime: (minutes: Int, seconds: Int, milliseconds: Int), totalMoves: Int, dateStamp: Date)] = [
(playerName: "Fred", completionTime: (minutes: 4, seconds: 10, milliseconds: 800), totalMoves: 3, dateStamp: Date()),
(playerName: "Barney", completionTime: (minutes: 5, seconds: 10, milliseconds: 800), totalMoves: 3, dateStamp: Date()),
(playerName: "Wilma", completionTime: (minutes: 4, seconds: 10, milliseconds: 801), totalMoves: 3, dateStamp: Date()),
(playerName: "Bam Bam", completionTime: (minutes: 1, seconds: 10, milliseconds: 0), totalMoves: 3, dateStamp: Date()),
(playerName: "Pebbles", completionTime: (minutes: 4, seconds: 10, milliseconds: 799), totalMoves: 3, dateStamp: Date())
]

leaderBoard.sort { $0.completionTime < $1.completionTime }
leaderBoard.forEach { print($0) }

输出:

(playerName: "Bam Bam", completionTime: (minutes: 1, seconds: 10, milliseconds: 0), totalMoves: 3, dateStamp: 2018-09-21 11:17:36 +0000)
(playerName: "Pebbles", completionTime: (minutes: 4, seconds: 10, milliseconds: 799), totalMoves: 3, dateStamp: 2018-09-21 11:17:36 +0000)
(playerName: "Fred", completionTime: (minutes: 4, seconds: 10, milliseconds: 800), totalMoves: 3, dateStamp: 2018-09-21 11:17:36 +0000)
(playerName: "Wilma", completionTime: (minutes: 4, seconds: 10, milliseconds: 801), totalMoves: 3, dateStamp: 2018-09-21 11:17:36 +0000)
(playerName: "Barney", completionTime: (minutes: 5, seconds: 10, milliseconds: 800), totalMoves: 3, dateStamp: 2018-09-21 11:17:36 +0000)

关于arrays - 使用嵌套元组对数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52435280/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com