在Swift中的有序字典

有什么内置的方式来创build一个有序的地图在Swift 2? 数组[T]按照对象附加到它的顺序sorting,但字典[K : V]不是有序的。

例如

 var myArray: [String] = [] myArray.append("val1") myArray.append("val2") myArray.append("val3") //will always print "val1, val2, val3" print(myArray) var myDictionary: [String : String] = [:] myDictionary["key1"] = "val1" myDictionary["key2"] = "val2" myDictionary["key3"] = "val3" //Will print "[key1: val1, key3: val3, key2: val2]" //instead of "[key1: val1, key2: val2, key3: val3]" print(myDictionary) 

有没有什么内置的方法来创build一个有序的key : value地图是以一个数组相同的方式sorting,或者我将不得不创build我自己的类?

我想尽可能避免创build自己的类,因为Swift包含的任何东西都可能更有效率。

您可以通过键入Inttypes的键来订购它们。

 var myDictionary: [Int: [String: String]]? 

要么

 var myDictionary: [Int: (String, String)]? 

我推荐第一个,因为它是一个更常见的格式(例如JSON)。

只需使用一个元组数组。 按你喜欢的方式sorting。 所有“内置”。

 var array = [(name: String, value: String)]() // add elements array.sort() { $0.name < $1.name } // or array.sort() { $0.0 < $1.0 } 

“如果您需要键值对的有序集合,并且不需要Dictionary提供的快速键查找,请参阅DictionaryLiteraltypes的替代选项。” – https://developer.apple.com/reference/swift/dictionary

正如马特所说,字典(和集合)是Swift(和Objective-C中)的无序集合。 这是devise。

如果你想要的话,你可以创build一个你的字典的键的数组,然后按照你想要的顺序sorting,然后用它从字典中获取项目。

NSDictionary有一个方法allKeys,它为您提供数组中所有字典的键。 我似乎记得类似的Swift Dictionary对象,但我不确定。 我仍然在学习Swift的细微差别。

编辑:

对于Swift字典,它是someDictionary.keys

Swift不包含任何内置的有序字典function,据我所知,Swift 2也没有

那么你将创build自己的。 你可以看看这些教程寻求帮​​助:

如果您的密钥确认为Comparable,则可以按照以下方式从未sorting的字典中创build已sorting的字典

 let sortedDictionary = unsortedDictionary.sorted() { $0.key > $1.key } 

我知道我是党的18,但你看看NSMutableOrderedSet?

https://developer.apple.com/reference/foundation/nsorderedset

当元素顺序非常重要时,可以使用有序集合作为数组的替代方法,并且testing对象是否包含在集合中的性能是一个考虑事项 – testing数组的成员资格比testing集合的成员资格要慢。

  var orderedDictionary = [(key:String, value:String)]()