【发布时间】:2019-11-16 08:51:33
【问题描述】:
我有一个字典数组。字典属于 [Int:Date] 类型。我想根据字典的值对这个数组进行排序,首先是最近的日期。键是 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
}
如果使用这种字典数组不是排序的好习惯,您有什么建议?最佳做法是什么?
更新:仅从字典中获取值并对其进行排序对我来说是不够的。我也使用键来存储值,排序后我需要键和值。这就是我使用字典数组的原因。
任何帮助将不胜感激。
【问题讨论】:
-
如果字典只有一个 KVP,你不能用
[(key: Int, date: Date)]代替吗?或者更好的是,创建一个自定义结构并使用该自定义结构的数组。 -
是的,使用自定义结构似乎是一种更好的方式。或者元组,正如迈克尔建议的那样。将值存储在字典键中似乎不是一个好主意。
-
实际上@Sweeper 也建议使用元组数组;)
-
啊,是的,这也是一个元组数组。这是漫长的一天。 :)
标签: arrays swift sorting date dictionary