我有一个字典数组。字典是 [Int:Date] 类型。我想根据字典的值对这个数组进行排序,首先是最近的日期。键是Int类型,但它们会在运行时改变。
这是示例代码。我在这里使用随机整数作为键来演示运行时:
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
}
如果使用这种字典数组不是一个好的排序实践,你有什么建议?最佳实践是什么?
更新:仅从字典中获取值并对它们进行排序对我来说是不够的。我也使用键来存储值,并且排序后我需要键和值。这就是我使用字典数组的原因。
任何帮助将不胜感激。
最佳答案
首先:dict.values
具有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
}
关于arrays - 在 Swift 5.1 中,在不知道键的情况下,根据 Date 类型的字典值对字典数组进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58889032/