我有NSDictionaries的NSDictionary,我想知道如何根据它们的值(Name)对词典进行排序?数字将从0-n变化。以下是结构的设置方式:
let attribute = cumstomClass.Attribute!
attribute =
-Krqq2AWOqWKys0siTmc
Description: ""
Name: "B"
Value: ""
-KrqpSvSX7eKqYfvu5ZO
Description: ""
Name: "A"
Value: ""
提前致谢! :)
答案 0 :(得分:1)
由于Dictionary
本质上未排序,因此您需要使用Array
。幸运的是,这可以通过功能性技术轻松完成:
guard let dict = nsDict as? [String : [String : String]] else { /* handle the error */ }
let sorted = dict.sorted { ($0.value["Name"] ?? "") < ($1.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 { ($0.value["Name"] ?? "") < ($1.value["Name"] ?? "") }.map {
$0.key
}
print(sortedKeys)
输出:
["KrqpSvSX7eKqYfvu5ZO", "Krqq2AWOqWKys0siTmc"]
这个键数组稍后可用于在填充集合视图时在运行时动态查找字典中的对象。由于所有字典查找,这种方法在性能方面可能比第一种方法更昂贵,但是如果由于某种原因还需要将原始字典保持原始形式,则会导致内存使用量降低。