我有一系列字典。字典是国际日期类型的。我想根据字典的值对这个数组进行排序,首先是最近的日期。键是Int类型的,但它们在运行时将被更改。
这是示例代码。我在这里使用随机Ints作为密钥来演示运行时:
var dates : [[Int:Date]] = []
let date1 = Date(timeInterval: 3000, since: Date())
let date2 = Date(timeInterval: 5000, since: Date())
let date3 = Date(timeInterval: 5000, since: Date())
let key1 = Int.random(in: 1..<1000)
let key2 = Int.random(in: 1..<1000)
let key3 = Int.random(in: 1..<1000)
dates.append([key1:date1])
dates.append([key2:date2])
dates.append([key3:date3])我尝试使用数组的sort方法,但是我不知道如何访问字典的键( Int类型)和值( Date类型),在sort方法的闭包中,键将在运行时被更改.
dates.sort { (p1:[Int : Date], p2:[Int : Date]) -> Bool in
// how to access keys of p1 and p2? I need them to compare values
}如果使用这样的字典数组不是一个好的分类实践,你会有什么建议?什么是最佳做法?
更新:仅仅从字典中获取值并对它们进行排序对我来说是不够的。我也使用键来存储值,并且在排序之后我需要同时存储键和值。这就是为什么我要使用一系列字典。
任何帮助都将不胜感激。
发布于 2019-11-16 09:03:12
首先:dict.values拥有dict的所有值。
但你为什么会有一个白痴阵列呢?为什么你没有一个有多个条目的白痴呢?如果你需要这一系列的数据:你想如何比较日期?从每个字典中得到所有的值,以及它们的最新日期,然后只比较每个字典中的最新日期?
建议:如果每个dict只有一个条目:使用元组:
typealias myDatatype = (someRandomInt: Int, aDateIChose: Date)
var dates : [myDatatype] = []
let date1 = Date(timeInterval: 3000, since: Date())
let date2 = Date(timeInterval: 5000, since: Date())
let date3 = Date(timeInterval: 5000, since: Date())
let key1 = Int.random(in: 1..<1000)
let key2 = Int.random(in: 1..<1000)
let key3 = Int.random(in: 1..<1000)
dates.append(contentsOf: [(key1, date1), (key2, date2), (key3, date3)])
dates.sort { p1, p2 in
p1.aDateIChose < p2.aDateIChose
}https://stackoverflow.com/questions/58889032
复制相似问题