Swift – 存储值顺序在Dictionary中完全更改

我试图显示在字典格式的数据。 下面有三个尝试。 首先尝试,输出顺序完全改变。 第二次尝试,输出顺序与input相同。 但是,在第三次尝试,我宣布variables为NSDictionary。 我收到的确切的输出。 为什么在Dictionary中这个变化? 请引导我。 我search了Swift的Dictionary标签。 但我找不到。

//First Attempt var dict : Dictionary = ["name1" : "Loy", "name2" : "Roy"] println(dict) //output: [name2: Roy, name1: Loy] //Second Attempt var dict : Dictionary = ["name2" : "Loy", "name1" : "Roy"] println(dict) //output: [name2: Loy, name1: Roy] ----------------------------------------------------------- //Third Attempt With NSDictionary var dict : NSDictionary = ["name1" : "Loy", "name2" : "Roy"] println(dict) //output: { name1 = Loy; name2 = Roy; } 

另一个查询:我已经用游戏场来validation。 我的屏幕截图如下:

play_ground_screen_shot

在这里,在NSDictionary中,我给了name5作为第一,但在右侧name2正在显示,然后,在println,它是按升序显示。 为什么这是发生?

play_ground_screen_shot_2

在这里,在字典中,我给了name5作为第一,但在右侧name2正在显示,然后,在println,它正在显示,如何在字典行。 为什么这是发生?

这是因为Dictionary vs NSDictionary的定义。

字典

字典存储集合中相同types的键和相同types的值之间的关联,没有定义的sorting。

没有秩序,他们可能会以不同的方式出来。
这与NSSet相当。

编辑:

的NSDictionary

字典收集关键值对。 NSDictionary不是简单地维护一个有序的或无序的对象集合,而是存储对象的对象,然后用它来检索。

没有秩序。

你不能sorting字典,但你可以sorting它的键和循环他们如下:

 let myDictionary = ["name1" : "Loy", "name2" : "Roy", "name3" : "Tim", "name4" : "Steve"] // ["name1": "Loy", "name2": "Roy", "name3": "Tim", "name4": "Steve"] let sorted = myDictionary.sorted {$0.key < $1.key} // or {$0.value < $1.value} to sort using the dictionary values print(sorted) // "[(key: "name1", value: "Loy"), (key: "name2", value: "Roy"), (key: "name3", value: "Tim"), (key: "name4", value: "Steve")]\n" for element in sorted { print("Key = \(element.key) Value = \(element.value)" ) } 

NSDictionarySwift::Dictionary都没有命令它的存储。 不同之处在于,一些NSDictionary对象在打印时对输出进行sorting,而Swift::Dictionary则不能。

-[NSDictionary description]的文档:

如果字典中的每个键都是一个NSString对象,则按键以升序列出条目,否则条目列出的顺序是未定义的。 该属性旨在为debugging目的生成可读输出,而不是用于序列化数据。

从Swift编程语言 :

字典存储集合中相同types的键和相同types的值之间的关联, 没有定义的sorting

基本上,在输出中看到的项目顺序是任意的,取决于数据结构的内部实现,不应该依赖。

字典的确是一个问题。 但是,有一个库可用来确保订单保持您初始化的方式。

OrderedDictionary是Swift中有序的字典数据结构的轻量级实现。

OrderedDictionary结构是一个不可变的generics集合,它结合了Swift标准库中的Dictionary和Array的特性。 像Dictionary一样,它存储键值对,并将每个键映射到一个值。 像数组一样,它存储那些按照从零开始的整数索引sorting和访问的对。

看看这里: https : //github.com/lukaskubanek/OrderedDictionary