如何在Swift iOS中按顺序访问Dictionary项目?

时间:2018-02-16 01:31:31

标签: ios swift dictionary

是否可以按字典顺序访问项目。我知道该词典主要用于随机访问。当我尝试作为键值对访问时,我的订单更改为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)")
}

3 个答案:

答案 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类型已重命名为KeyValuePairsSE-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)"

参考:DictionaryLiteral

但是,如果你想以不同的方式解决它,我会推荐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中的字典是无序集合。他们没有任何本地订单。如果希望以特定顺序存储数据,请使用其他一些对象的数组。 (结构,甚至是一系列字典。)