Joj*_*dmo 49 dictionary ios swift swift2
有没有内置的方法在Swift 2中创建有序地图?数组[T]按对象附加到它的顺序排序,但字典[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)
Run Code Online (Sandbox Code Playgroud)
是否有任何内置方法来创建一个有序的key : value映射,其顺序与数组相同,或者我是否必须创建自己的类?
如果可能的话,我想避免创建自己的类,因为Swift包含的内容很可能更有效.
Mun*_*ndi 32
只需使用一组元组.按你喜欢的方式排序.所有"内置".
var array = [(name: String, value: String)]()
// add elements
array.sort() { $0.name < $1.name }
// or
array.sort() { $0.0 < $1.0 }
Run Code Online (Sandbox Code Playgroud)
chr*_*nse 30
您可以通过键入类型来订购它们Int.
var myDictionary: [Int: [String: String]]?
Run Code Online (Sandbox Code Playgroud)
要么
var myDictionary: [Int: (String, String)]?
Run Code Online (Sandbox Code Playgroud)
我推荐第一个,因为它是一种更常见的格式(例如JSON).
cof*_*der 24
"如果您需要有序的键值对集合,并且不需要Dictionary提供的快速键查找,请参阅DictionaryLiteral类型以获取替代方案." - https://developer.apple.com/reference/swift/dictionary
bar*_*mes 16
您可以使用KeyValuePairs,来自文档:
当您需要键值对的有序集合并且不需要 Dictionary 类型提供的快速键查找时,请使用 KeyValuePairs 实例。
let pairs: KeyValuePairs = ["john": 1,"ben": 2,"bob": 3,"hans": 4]
print(pairs.first!)
Run Code Online (Sandbox Code Playgroud)
//打印(键:“约翰”,值:1)
正如Matt所说,词典(和集合)是Swift(和Objective-C)中的无序集合.这是设计的.
如果需要,您可以创建字典键的数组,并将其排序为您想要的任何顺序,然后使用它从字典中获取项目.
NSDictionary有一个方法allKeys,它为您提供数组中字典的所有键.我似乎记得类似于Swift Dictionary对象的东西,但我不确定.我还在学习Swift的细微差别.
对于Swift Dictionaries来说 someDictionary.keys
小智 6
如果您的键确认为 Comparable,您可以从未排序的字典中创建一个排序的字典,如下所示
let sortedDictionary = unsortedDictionary.sorted() { $0.key > $1.key }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
31580 次 |
| 最近记录: |