如何在Swift中排序字典键?
问题描述:
检查以下词典:如何在Swift中排序字典键?
var testDict: [String : Int] = [
"a" : 1,
"b" : 2,
"c" : 3,
"d" : 4
]
现在,通过字典的键迭代:
for i in testDict.keys {
print(i)
}
这产生以下输出:
BACD
但是,预期的产量无LD是在编码顺序的键:
A B C d
由于这不是这种情况,我假定键进行排序。如果是这样,他们是如何排序的,更重要的是,他们怎样才能返回到他们写的顺序呢?
答
不同于阵列中的项目,在字典中的项目不具有 指定顺序
总之,字典项目未排序,它们是作为有效地存储尽可能通过他们的hash值(你不应该对订单做任何假设),这就是为什么:这就是为什么:
字典密钥类型必须符合Hashable协议,如 集合的值类型。
对于第二个问题,由于字典没有排序,所以不能将值或键内部返回到原始顺序(因为它没有)。你可以做的,是一切价值和键遍历以特定的顺序,如:
let dic = ["a" : 1, "b" : 2, "c" : 3, "d" : 4]
for key in dic.keys.sort(<) {
print("key: \(key), value: \(dic[key])")
}
答
字典(SWIFT或NSDictionary
)是一个关键值映射。概念没有秩序。您放入一个值(键)并获取该键的另一个值(值)。这不取决于任何顺序。
如果你想有一个键的顺序,获取键和排序。
顺便说一句:有序和排序有区别。有序的意思是,一个元素保持它的位置。无论排序方式如何,此订单都可以排序。
以示区别觉得字典创建这样的:
var testDict: [String : Int] = [
"b" : 2,
"a" : 1,
"c" : 3,
"d" : 4
]
如果字典将被排序,你的代码的结果将是:B,A,C,d。这是字典创建的订单。但它没有排序。 (排序如何?注音?字面?字母数字?)
排序的数组(也称为元素的位置)也未排序。作为NSArray
的同类有序集合,即使没有办法对它们进行排序,也会保留订单:请考虑包含字符串,数字和图像的数组。数组保留了你放置物品的顺序,但是它没有办法对它进行排序。 (再次说明:无论什么排序都意味着什么。)在Swift的整个生物圈中,Objective-C和Foundation只有一个排序集合:NSIndexSet
。
字典不是一个有序的集合。 – Moritz