【发布时间】:2020-06-05 16:42:01
【问题描述】:
有没有办法对二维数组进行排序,这样
[[9,8,7]
[6,1,4]]
变成
[[7,8,9]
[4,1,6]]
我正在为结构图构建表格
var graphPoints = [[Double]]()
graphPoints.append(jsonResult!.highscoreRecord.map { ($0.Date.timeIntervalSince1970) })
graphPoints.append(jsonResult!.highscoreRecord.map { Double($0.Score) })
graphPoints.append(jsonResult!.highscoreRecord.map { Double($0.avDuration) })
graphPoints.append(jsonResult!.highscoreRecord.map { Double($0.Tries) })
// var sortedGraphPoints = graphPoints.sort { ($0[0]) < ($1[0]) }
var sortedGraphPoints = graphPoints.sort { ([0]$0) < ([0]$1) }
但是,标记为注释的行会针对每个内部数组的第一个元素进行排序,这意味着它会对每个数据集中的值进行排序,而不是按日期对所有数据集进行排序。
最后一行导致错误“二元运算符'
我找到了一些代码来转置数组。但我并不真正理解代码(我是 Swift 新手),我更愿意保留结构。
【问题讨论】:
-
这是一段真的奇怪的代码。你到底想达到什么目的?
-
所以你想保持 7 和 4、8 和 1、9 和 4 之间的关联不变?如果是这样,最好将它们放在结构或元组中
-
@Alexander-ReinstateMonica 抱歉 :-) 所以,我正在将一个 JSON 文件读入一个变量(jsonResult)。此变量基于一个结构,其中包含一个名为 highscoreRecord 的数组。该数组包含一个包含日期、分数等元素的子结构。现在我想随着时间的推移绘制分数等。所以我把它存储在graphPoints中。现在我想按日期排序
-
@Gereon 完全正确。从我的数组中填充结构是否与填充数组一样有效?我很高兴知道如何做到这一点:-) 这里包含的复杂性是从 date() 到 double 的类型转换,以使下游计算更容易
-
@w461 我理解代码,但奇怪的是你拥有所有这些丰富的类型数据(名称如
Tries、Date、avDuration等) ,您将其折叠成一堆数组(丢失所有这些),然后想知道如何按您刚刚丢弃的数据进行排序。 Gereon 为您指明了一个好的方向。不要过早序列化您的数据。在将其发送到外部系统(图形库、Web 请求等)之前的最后一步执行此操作