【问题标题】:Sorting an array of dictionaries based on dictionary values which are of Date type, without knowing the keys, in Swift 5.1?在 Swift 5.1 中,在不知道键的情况下,根据 Date 类型的字典值对字典数组进行排序?
【发布时间】: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


【解决方案1】:

首先:dict.values 具有 dict 的所有值。

但是为什么你有一个 dicts 数组呢?为什么你没有一个包含多个条目的字典?如果你需要那个字典数组:你想如何比较日期?从每个字典中获取所有值,以及它们的最新日期,然后仅比较每个字典中的最新日期?

建议:如果每个字典只有一个条目:使用元组代替:

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
}

【讨论】:

  • (1) 字典不是有序集合,因此对字典进行排序没有意义。这就是我使用数组的原因。 (2) 我也需要钥匙。仅取值并对其进行排序是不够的。键也存储值,因此排序后需要键和值。
  • 所以每个字典只有一个条目?或者您想比较哪个条目?我会将代码添加到我的答案中
  • 还有一个问题:如果每个 dict 只有一个条目:为什么不使用元组代替?
  • 是的,每个字典都有 1 个条目。您的回答让我意识到我为此目的使用了错误的工具(字典)。我可能不应该将值存储为字典键。是的,也可以使用元组。
猜你喜欢
  • 2021-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-12
  • 1970-01-01
  • 2023-03-13
  • 2011-12-11
相关资源
最近更新 更多