您好我在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 我不明白这个输出的原因。
答案 0 :(得分:9)
词典:
字典存储相同类型的键与集合中相同类型的值之间的关联,而没有定义的顺序。
每个值都与唯一键相关联,该唯一键作为字典中该值的标识符。与数组中的项目不同,字典中的项目没有指定的顺序。
数组 - 数组在有序列表中存储相同类型的值。
集合 - 集合在无定义排序的集合中存储相同类型的不同值。
答案 1 :(得分:3)
@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中迭代值时,您不能指望相同的顺序。
答案 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
(您不必维护以前的索引以获得值)。因此您可以根据需要插入值。它不会因维护任何索引而烦恼。