字典打印键和Swift 4中的值

时间:2017-07-17 10:09:27

标签: swift dictionary

您好我在Xcode9尝试了一个打印字典项目。像这样:

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

for (key,value) in items{

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

}

输出:

Glass : 1
Bear : 0
Car : 2

为什么输出不是这样的:熊:0,玻璃:1,汽车:2 我不明白这个输出的原因。

4 个答案:

答案 0 :(得分:9)

词典:

字典存储相同类型的键与集合中相同类型的值之间的关联,而没有定义的顺序。

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

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

集合 - 集合在无定义排序的集合中存储相同类型的不同值。

来自Apple documentation

enter image description here

答案 1 :(得分:3)

Swift中的

@Override public Fragment getItem(int position) { return Tab2.newInstance(position); } 实现为哈希映射。我们无法保证Dictionary中的商品与您添加商品的订单相同。

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

Array

您的迭代将按预期工作,但您将失去var items : [(key: String, value: String)] = [(key: "Bear", value: "0"),(key: "Glass", value: "1"), (key: "Car", value: "2")] 按下标查找项目的能力

答案 2 :(得分:1)

  • Arrays是有序的值集合。
  • Sets是唯一值的无序集合。
  • Dictionaries无序 关键值协会的集合。

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

Reference to Collection Type

答案 3 :(得分: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 (您不必维护以前的索引以获得值)。因此您可以根据需要插入值。它不会因维护任何索引而烦恼。