迅速循环控制台的顺序不正确

时间:2018-08-27 13:18:00

标签: arrays swift loops

var letters = ["a": "Alpha", "b": "Bravo", "c": "Charlie", "d": "Delta"]

for (letter, pilotAlphabet) in letters {
    print("\(letter) stands for \(pilotAlphabet)")
}

这是我在游乐场上的代码。控制台提供了以下信息:

b stands for Bravo
a stands for Alpha
d stands for Delta
c stands for Charlie

我想知道为什么这个结果不符合我给出的顺序。

2 个答案:

答案 0 :(得分:2)

letters是一个Dictionary,其键和值均为StringDictionary从定义上来说是无序集合,因此当迭代字典的键-值对时,其顺序将与将值添加到字典中的顺序不同,也不会相同按字母顺序。

如果您需要按字母顺序显示键值对,可以通过在sorted上调用Dictionary并遍历生成的Array元组来实现。

var letters = ["a": "Alpha", "b": "Bravo", "c": "Charlie", "d": "Delta"]

for (letter, pilotAlphabet) in letters.sorted(by: {$0.key<$1.key}) {
    print("\(letter) stands for \(pilotAlphabet)")
}

输出:

a stands for Alpha
b stands for Bravo
c stands for Charlie
d stands for Delta

答案 1 :(得分:0)

当您遍历Dictionary的内容时,您将作为键值对的无序集合进行操作。 documented的顺序在突变之间是稳定的,但在其他情况下是不可预测的。