【问题标题】:Sort dictionary by keys in Swift [duplicate]在Swift中按键对字典进行排序[重复]
【发布时间】:2020-11-10 20:07:22
【问题描述】:

我有一个[Int : String] 类型的字典,我想按键排序,然后将其转换为数组。例如:

let dict : [Int : String] = [18 : "Maya", 13 : "Ori", 49 : "Mom", 21 : "Lital", 51 : "Dad"]
// After convertion:
// ["Ori", "Maya", "Lital", "Mom", "Dad"]

我该怎么做? 我只知道如何通过Array(dict.values)dict 转换为数组,但它并没有按照正确的顺序进行。

谢谢

【问题讨论】:

  • let sortedValuesByKeys = dict.sorted(by: { $0.key < $1.key }).map { $0.1 } 应该可以解决问题。由于字典没有排序,我们对元组 (key, value) 进行排序,然后排序,然后仅获取(映射)值。

标签: arrays swift sorting dictionary


【解决方案1】:

Dictionary 已经有一个 sorted 方法,该方法采用定义排序函数的闭包。您可以在闭包中按键排序,然后简单地映射结果元组以仅获取值。

let sortedDictKeys = dict.sorted(by: { $0.key < $1.key }).map(\.value)

【讨论】:

  • 您可以在映射值时使用 keypath map(\.1) 或提高电池可读性 map(\.value)
  • @LeoDabus .map(\.value) 确实读得更好,更新了我的答案,谢谢!
  • 要使用字典的键路径对字典进行排序,您可以查看post dict.sorted(\.key).map(\.value)dict.sorted(\.key, by: &gt;).map(\.value)
【解决方案2】:

我已通过以下方式转换:-

 let dict : [Int : String] = [18 : "Maya", 13 : "Ori", 49 : "Mom", 21 : "Lital", 51 : "Dad"]
 let sortedDict = dict.sorted { $0.key < $1.key }
 let sortedDictArray = Array(sortedDict.map({ $0.value }))
 print(sortedDictArray)

输出为:-

 ["Ori", "Maya", "Lital", "Mom", "Dad"]

【讨论】:

  • 初始化一个数组是没有意义的。 map 已经返回一个数组。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-11-03
  • 1970-01-01
  • 2014-08-02
  • 2010-10-09
  • 2014-07-28
  • 2021-08-12
  • 1970-01-01
相关资源
最近更新 更多