Swift 按值对 NSDictionary 的 NSDictionary 进行排序

Swift Sort NSDictionary of NSDictionary by Value

我有一个由 NSDictionaries 组成的 NSDictionary,我想知道如何按字典的值(名称)对字典进行排序?数字将从 0-n 变化。以下是结构的设置方式:

let attribute = cumstomClass.Attribute!

属性=

-Krqq2AWOqWKys0siTmc
   Description: "" 
   Name: "B"
   Value: ""
-KrqpSvSX7eKqYfvu5ZO
   Description: ""
   Name: "A"
   Value: ""

提前致谢! :)

由于 Dictionary 本质上是未排序的,因此您需要改用 Array。幸运的是,这可以通过函数技术轻松完成:

guard let dict = nsDict as? [String : [String : String]] else { /* handle the error */ }

let sorted = dict.sorted { ([=10=].value["Name"] ?? "") < (.value["Name"] ?? "") }

print(sorted)

这将为您提供 Array 个元组,其中包含各个字典的键和值,按 "Name":

排序
[(key: "KrqpSvSX7eKqYfvu5ZO", value: ["Name": "A", "Value": "", "Description": ""]),
 (key: "Krqq2AWOqWKys0siTmc", value: ["Name": "B", "Value": "", "Description": ""])]

或者,您可以简单地获取 String 键的排序数组:

let sortedKeys = dict.sorted { ([=12=].value["Name"] ?? "") < (.value["Name"] ?? "") }.map {
    [=12=].key
}

print(sortedKeys)

输出:

["KrqpSvSX7eKqYfvu5ZO", "Krqq2AWOqWKys0siTmc"]

此键数组稍后可用于在运行时填充集合视图时从字典中动态查找对象。由于所有字典查找,此方法在性能方面可能比第一种方法更昂贵,但如果您出于某种原因还需要以其原始形式保留原始字典,则会导致内存使用率降低。