如何在Swift iOS中按顺序访问字典项?
是否可以按顺序访问字典上的项目。我知道那本字典主要是为随机存取而设计的。当我试图以键值对的形式访问时,我的顺序会更改为名称、id、标题等如何在Swift iOS中按顺序访问字典项?,ios,swift,dictionary,Ios,Swift,Dictionary,是否可以按顺序访问字典上的项目。我知道那本字典主要是为随机存取而设计的。当我试图以键值对的形式访问时,我的顺序会更改为名称、id、标题等 let inputDataSet = ["id":1, "name":"Thomas", "role":"Programming Geek", "header":"bla", "dept":"nloo", "address":"dsd", "pic":"asd" for (key,value) in inputDataSet { print("c
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)")
}
Swift和Objctive-C中的词典是无序的集合。他们没有任何本地秩序。如果希望数据按特定顺序存储,请使用其他一些对象的数组。(结构,甚至是一组字典。)这里对您来说最好的选择是
KeyValuePairs
键值对的轻量级集合
当您需要一个有序的键值对集合而不需要快速键查找时
let recordTimes: KeyValuePairs = ["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
。要在集合中拥有键、值,可以将其存储在元组中。比如说元组数组。请看下面的示例:
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
由于这一点,您有了一个顺序和键,值对象。
希望有帮助
更新:
答案已更新,以反映变化
您可以使用词典横向
键值对的轻量级集合。使用字典横向
当需要键值对的有序集合和
不需要字典类型提供的快捷键查找。
与真正字典中的键值对不同,键和
DictionaryTerral实例的值必须符合哈希值
协议
注意:DictionaryTerral
还允许复制键
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)")
}
字典没有顺序。@rmaddy列表在Swift中可用吗?请查看Swift手册中有关集合的部分。@rmaddy我浏览了下面的url,但没有发现任何对我有用的东西,它叫数组。谢谢你@Shial。这听起来不错。让我试试我现在的工作Scenario@ThomasEaso让我知道这是否对你有帮助。很抱歉延迟回复。我去检查这在我当前的场景中是否有帮助。谢谢你的正确答案。Shilal也可以随意对这个问题投赞成票。这个问题对我来说是新的。谢谢你启发我。(投票)。我敢打赌它的性能是O(n)…虽然dictionaryletral
不支持订阅,使用起来有点痛苦adicliteral.first(其中:{$0.0==“key”})
非常详细。我想设计师不希望任何具有O(n)性能的东西使用订阅。我更喜欢$0.key==“key”
let inputDataSet: KeyValuePairs<String, Any> = ["id": 1, "name":"Thomas", "role":"Programming Geek", "header":"bla", "dept":"nloo", "address":"dsd", "pic":"asd"]