2017-07-17 38 views
2

你好,我试过在Xcode9打印字典项目。就像这样:字典打印键和值在斯威夫特4

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 我不明白这个道理输出。

+1

字典类型不排序。 – Joshua

+0

您可以改为对字典进行排序。看[这个答案](https://stackoverflow.com/a/31528848/3687801)。 – nayem

回答

7

词典:

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

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

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

集合 -集合在集合中存储具有相同类型的不同值并且没有定义的排序。

Apple documentation

enter image description here

2

Dictionary在Swift中实现为哈希映射。我们不保证Dictionary中的商品与您添加的商品的订单具有相同的顺序。

保留项目顺序的唯一容器是Array。你可以用它来存储元组,像这样:

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

你的迭代会按预期工作,但你会失去Dictionary's通过下标来查找商品的能力

+0

你能举个例子吗? – Mayday

+3

你的问题就是你的例子@五月 –

+0

@BhavinRamani是正确:)例如订购物品。我如何订购? – Mayday

1
  • Arrays正在有序值的集合。
  • Sets是唯一值的无序集合。
  • Dictionaries是无序的 键值关联的集合。

所以,当您从Dictionary中迭代值时,您无法期待相同的顺序。

Reference to Collection Type

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(你不必保持以前的索引有值)被引入。所以你可以插入你喜欢的值。它不会打扰你维护任何指数。