将我的代码转换为新的Swift(2.2),字典没有数组功能?

时间:2016-04-30 19:37:39

标签: swift nsdictionary

我试图将我的代码转换为Swift 2.2(自从Swift 2.0发布之前我还没有打开过这段代码)。我所做的很多事情之一就是使用字典项的.array函数将dictionarys转换为数组。这显然不再是一个功能。我应该做些什么?我认为.elements函数可以工作,但我不能使用数组[index]命令。

谢谢!

1 个答案:

答案 0 :(得分:1)

有很多方法可以完成这样的事情。最简单的方法是将模型更改为字典数组(或自定义对象):

var people = [
    ["name": "Rob", "city": "New York", "state": "NY", "street": "11 Wall Street"],
    ["name": "Jim", "city": "Washington", "state": "DC", "street": "1600 Pennsylvania Avenue"],
    ["name": "Sue", "city": "Los Angeles", "state": "CA", "street": "4059 Mt Lee Dr."]
]

而且,如果您想按name排序:

people.sortInPlace { return $0["name"] < $1["name"] }

或者,让我们想象你真的有一个字典,其中唯一的标识符是关键:

var people = [
    34: ["name": "Rob", "city": "New York", "state": "NY", "street": "11 Wall Street"],
    42: ["name": "Jim", "city": "Washington", "state": "DC", "street": "1600 Pennsylvania Avenue"],
    65: ["name": "Sue", "city": "Los Angeles", "state": "CA", "street": "4059 Mt Lee Dr."]
]

然后,您可以构建按名称排序的标识符数组:

let sortedIdentifiers = people.map { return ($0, $1["name"]) }  // this builds array of items like `(34, "Rob")`
    .sort { $0.1 < $1.1 }                                       // this sorts that array by the second item (e.g. the name)
    .map { $0.0 }                                               // just return the identifiers sorted by name

您现在可以下标sortedIdentifiers,例如:

print(people[sortedIdentifiers[0]])
print(people[sortedIdentifiers[1]])
print(people[sortedIdentifiers[2]])

有很多方法可以解决这个问题。如果您编辑问题以向我们展示您的模型的样子,我们可能会提供更具体的解决方案。