在Swift 4中打印字典的键和值

5

你好,我尝试在Xcode9中打印字典项,像这样:

var items = ["Bear":"0", "Glass":"1", "Car":"2"]

for (key,value) in items{

print("\(key) : \(value)")

}

输出:

Glass : 1
Bear : 0
Car : 2

为什么输出不是这样的:Bear: 0, Glass:1, Car:2?我不理解这个输出的原因。

1
字典类型未排序。 - Joshua
你可以对字典进行排序。请参见此答案 - nayem
4个回答

11

字典:

字典是一种无序的集合,用于存储相同类型键和相同类型值之间的关联。

每个值都与唯一的键相关联,该键作为识别该值的标识符在字典中起作用。与数组中的项不同,字典中的项没有特定的顺序

数组 - 数组将同一类型的值存储在有序列表中。

集合 - 集合将同一类型的不同值存储在无序集合中。

来自Apple文档

输入图像说明


3

Swift中的Dictionary是由哈希映射实现的。不能保证Dictionary中的项目与添加它们时的顺序相同。

唯一可以保留项目顺序的容器是Array。您可以使用它来存储元组,例如:

var items : [(key: String, value: String)] = [(key: "Bear", value: "0"),(key: "Glass", value: "1"), (key: "Car", value: "2")]

您的迭代将按预期工作,但您将失去Dictionary按下标查找项目的功能。

你能给我一个例子吗? - Mayday
3
你的问题就是你的例子 @Mayday - Bhavin Ramani
@BhavinRamani 是的,没错 :) 有关已排序项目的示例。我该如何订购? - Mayday

1
  • 数组是有序的值集合。
  • 集合是无序的唯一值集合。
  • 字典是键-值关联的无序集合。

因此,当您从字典中迭代值时,不能期望相同的顺序。

集合类型参考


0

Dictionary 集合没有排序,也就是说 它根本不保证有序。但是 Array 是有序的。 Dictionary 按离散顺序添加值,而 Array 按连续顺序添加值。

你不能像这样拥有一个 Array

["a", "b", ... , "d", ... , ... , "g"]    //Discrete index aren't allowed. You just can't skip any index in between.

相反,您必须将上述数组设置为以下方式:

["a", "b", "d", "g"] 

为了摆脱这种行为,引入了Dictionary (您不必维护先前的索引即可拥有值)。因此,您可以随意插入值。它不会打扰您维护任何索引。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接