如何在Swift iOS中按顺序访问字典项?

如何在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

是否可以按顺序访问字典上的项目。我知道那本字典主要是为随机存取而设计的。当我试图以键值对的形式访问时,我的顺序会更改为名称、id、标题等

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"]