是否可以按字典顺序访问项目。我知道该词典主要用于随机访问。当我尝试作为键值对访问时,我的订单更改为name,id,header,... etc
let inputDataSet = ["id":1, "name":"Thomas", "role":"Programming Geek", "header":"bla", "dept":"nloo", "address":"dsd", "pic":"asd"
for (key,value) in inputDataSet {
print("current key:\(key) value:\(value as! String)")
}
答案 0 :(得分:4)
您可以使用DictionaryLiteral
键值对的轻量级集合。使用DictionaryLiteral 例如,当您需要有序的键值对集合时 不需要Dictionary类型提供的快速键查找。 与真正的字典中的键值对不同,既不是键也不是键 DictionaryLiteral实例的值必须符合Hashable 协议
注意:DictionaryLiteral
也允许重复键
let inputDataSet: DictionaryLiteral<String, Any> = ["id": 1, "name":"Thomas", "role":"Programming Geek", "header":"bla", "dept":"nloo", "address":"dsd", "pic":"asd"]
for (key, value) in inputDataSet {
print("current key:\(key) value:\(value)")
}
这将打印
当前密钥:id值:1
当前密钥:名称值:托马斯
当前关键字:角色值:编程Geek
当前键:标题值:bla
当前密钥:dept值:nloo
当前密钥:地址值:dsd
当前密钥:pic值:asd
编辑/更新:
Swift 5•Xcode 10.2
DictionaryLiteral
类型已重命名为KeyValuePairs
。 SE-0214
let inputDataSet: KeyValuePairs<String, Any> = ["id": 1, "name":"Thomas", "role":"Programming Geek", "header":"bla", "dept":"nloo", "address":"dsd", "pic":"asd"]
答案 1 :(得分:3)
这里最好的选择是DictionaryLiteral
轻量级键值对的集合。
当您需要有序的键值对集合并且不需要快速键查找时
let recordTimes: DictionaryLiteral = ["Florence Griffith-Joyner": 10.49,
"Evelyn Ashford": 10.76,
"Evelyn Ashford": 10.79,
"Marlies Gohr": 10.81]
print(recordTimes.first!)
// Prints "("Florence Griffith-Joyner", 10.49)"
但是,如果你想以不同的方式解决它,我会推荐Array
。要在集合中拥有密钥值,您可以将其存储在Tuple
中。让我们说一下元组。看看下面的例子:
let inputDataSet: [(String, Any)] = [("id",1), ("name","Thomas"), ("role","Programming Geek"), ("header","bla"), ("dept","nloo"), ("address","dsd"), ("pic","asd")]
for (key, value) in inputDataSet {
print("current key:\(key) value:\(value)")
}
上述狙击手的结果如下所示:
current key:id value:1
current key:name value:Thomas
current key:role value:Programming Geek
current key:header value:bla
current key:dept value:nloo
current key:address value:dsd
current key:pic value:asd
多亏了这个,你有一个订单和密钥,价值对象。 希望它有所帮助!
答案 2 :(得分:2)
Swift和Objctive-C中的字典是无序集合。他们没有任何本地订单。如果希望以特定顺序存储数据,请使用其他一些对象的数组。 (结构,甚至是一系列字典。)