在Swift 5.1中,在不知道关键字的情况下,根据Date类型的字典值对字典数组进行排序



我有一组字典。词典属于[Int:Date]类型。我想根据dictionary的值对这个数组进行排序,首先是最近的日期。键是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方法,但我不知道如何在sort方法的闭包中访问字典的键(Int类型(和值(Date类型(,这些键将在运行时更改。。。

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的所有值。

但为什么你有一个dicts数组?为什么你没有一个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
}

最新更新