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

标签 arrays swift sorting date dictionary

我有一个字典数组。字典是 [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/

相关文章:

sql - SELECT * FROM table WHERE field IN(array) - H2 数据库

javascript - 如何根据输入值数组返回对象数组的匹配结果

swift - NSTableView 不会在编辑时更新值

ios - 在没有任何 Storyboard引用的情况下在 Controller 之间传递数据

swift - 如何使用 swift codable 根据特定排序顺序对自定义对象进行排序

java - 在 JTable 中显示金钱,但保留按 double 排序的能力

javascript - 对 ng-grid 中的基础数据进行排序

javascript - 如何使用 JavaScript 更新或添加数组中的值?

swift - UIView subview 被放置在意外的位置(Swift 4)

arrays - 在 ruby​​ 中拆分字符串数组的最佳方法?