为什么Swift中遍历Dictionary字典时返回的键值对顺序是随机的?
问题原因
Swift 标准库中的Dictionary(字典)是基于哈希表实现的无序集合,本身不具备保留元素定义/插入顺序的特性,直接遍历得到的键值对顺序无规律,和你书写的定义顺序无关。
解决方案
方案1:对字典键排序后遍历
如果你只是需要按指定顺序输出,不需要修改存储结构,直接对字典的键按你需要的降序规则排序后再遍历取值即可,示例代码如下:
let map: [Int : String] = [1000 : "M", 900 : "CM", 500 : "D", 400 : "CD", 100 : "C", 90 : "XC", 50 : "L", 40 : "XL", 10 : "X", 9 : "IX", 5 : "V", 4 : "IV", 1 : "I"] // 键按从大到小排序后遍历 for key in map.keys.sorted(by: >) { print("(key: \(key), value: \"\(map[key]!)\")") }
方案2:使用元组数组存储
如果你需要全程保留定义的顺序,不需要字典的O(1)查找特性,可以直接用元组数组替代字典存储,天然保留书写顺序,示例代码如下:
// 元组数组会严格保留定义时的顺序 let orderedPairs: [(key: Int, value: String)] = [(1000, "M"), (900, "CM"), (500, "D"), (400, "CD"), (100, "C"), (90, "XC"), (50, "L"), (40, "XL"), (10, "X"), (9, "IX"), (5, "V"), (4, "IV"), (1, "I")] for pair in orderedPairs { print(pair) }
运行上述两种方案的代码,都能得到你期望的输出结果。
内容的提问来源于stack exchange,提问作者Ethel Sun
相关产品推荐
相关产品推荐

