首页 > 解决方案 > 在 Swift4 中按键对嵌套字典进行排序

问题描述

目前,我有一个嵌套字典声明为

var userSchedule = [String:[String:String]]()

我得到如下结果:

["2": ["time": "tbd", "date": "1/15", "name": "Chris"], 
 "0": ["time": "6:16 PM", "date": "1/15", "name": "Bob"], 
 "1": ["time": "1:15PM", "date": "1/15", "name": "John"]]

我想对此结果进行排序,以便结果按第一个键排序。

所以:

["0": ["time": "6:16 PM", "date": "1/15", "name": "Bob"], 
 "1": ["time": "1:15PM", "date": "1/15", "name": "John"], 
 "2": ["time": "tbd", "date": "1/15", "name": "Chris"]]

我怎样才能在 Swift4 中有效地做到这一点?请帮忙!

标签: iosswiftsortingdictionaryswift4

解决方案


你可以这样做:首先将它排序为一个数组,然后用字典元素构建一个数组。这很简单,因为它只有两行代码。

var userSchedule = ["2": ["time": "tbd", "date": "1/15", "name": "Chris"],
"0": ["time": "6:16 PM", "date": "1/15", "name": "Bob"],
"1": ["time": "1:15PM", "date": "1/15", "name": "John"]]

let userScheduleArray = userSchedule.sorted{$0.key < $1.key}

print(userScheduleArray) 
//[(key: "0", value: ["time": "6:16 PM", "date": "1/15", "name": "Bob"]), (key: "1", value: ["time": "1:15PM", "date": "1/15", "name": "John"]), (key: "2", value: ["time": "tbd", "date": "1/15", "name": "Chris"])]

let separatedDict = userScheduleArray.map{Dictionary(uniqueKeysWithValues: [$0])}

print(separatedDict)
//[["0": ["time": "6:16 PM", "date": "1/15", "name": "Bob"]], 
// ["1": ["time": "1:15PM", "date": "1/15", "name": "John"]], 
// ["2": ["time": "tbd", "date": "1/15", "name": "Chris"]]]

print(type(of: separatedDict))
//[[String:[String:String]]] i.e. Array<Dictionary<String, Dictionary<String, String>>> 

推荐阅读