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。 我的屏幕截图如下:
在这里,在NSDictionary中,我给了name5作为第一,但在右侧name2正在显示,然后,在println,它是按升序显示。 为什么这是发生?
在这里,在字典中,我给了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)" ) }
NSDictionary
和Swift::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