如何按照指定数组的顺序对字典进行排序?
解决Swift字典按指定顺序排序的问题
首先要明确:Swift 中的标准[String: Any]这类字典是无序的,它不会保存键的插入或定义顺序。所以要实现你想要的“有序字典”效果,有两种常用方案:
方案1:用数组存储有序键值对(兼容所有Swift版本)
适合只需要按顺序遍历、输出键值对的场景,步骤很简单:
- 遍历你指定顺序的数组
orderToFollow - 依次从原字典中取出对应键的值
- 把键和值组成元组存入数组,数组会保持遍历的顺序
代码示例:
var orderToFollow:[String] = ["fromAccount", "toAccount", "amount", "benName"] var randomOrderDic = [ "benName": "abc", "amount": 15.0, "toAccount": "123456", "fromAccount": "789530" ] // 创建数组存储按顺序排列的键值对 var orderedItems: [(key: String, value: Any)] = [] for key in orderToFollow { // 确保字典里有这个键的值,避免崩溃 if let value = randomOrderDic[key] { orderedItems.append((key, value)) } } // 打印出你想要的格式 print("[") for item in orderedItems { // 根据值的类型调整打印格式,字符串加引号,数字直接输出 let valueStr: String if let strValue = item.value as? String { valueStr = "\"\(strValue)\"" } else { valueStr = "\(item.value)" } print(" \"\(item.key)\": \(valueStr),") } print("]")
方案2:使用OrderedDictionary(iOS 16+/macOS 13+及以上)
如果你需要一个既保留顺序、又能像普通字典一样通过键访问值的结构,可以用苹果Swift Collections框架里的OrderedDictionary,它会严格保持键的插入顺序。
步骤:
- 先导入
SwiftCollections框架 - 按指定顺序的数组,把原字典的键值对依次插入到
OrderedDictionary中
代码示例:
// 先导入框架 import SwiftCollections var orderToFollow:[String] = ["fromAccount", "toAccount", "amount", "benName"] var randomOrderDic = [ "benName": "abc", "amount": 15.0, "toAccount": "123456", "fromAccount": "789530" ] // 创建有序字典 var orderedDict = OrderedDictionary<String, Any>() for key in orderToFollow { if let value = randomOrderDic[key] { orderedDict[key] = value } } // 直接打印就是有序的格式 print(orderedDict)
内容的提问来源于stack exchange,提问作者Peo
相关产品推荐
相关产品推荐

