我在操场中有这个代码
import UIKit
let anArray = NSArray(array:[["code": "LT","name": "Lithuania"], ["code": "ME","name": "Montenegro"], ["code": "ES","name": "Spain"]])
let findCode = "ES"
for object in anArray {
if (object["code"] as String == findCode) {
object["name"] as String
}
}
我想用模式匹配来简化它,这可能吗?
我在操场上创建了这个。。。
import UIKit
let array : [[String: String]] = [["code": "LT","name": "Lithuania"], ["code": "ME","name": "Montenegro"], ["code": "ES","name": "Spain"]]
let findCode = "ES"
let filteredArray = array.filter{$0["code"] == findCode}
println(filteredArray) // [["code": "ES", "name": "Spain"]]
它使用过滤函数而不是迭代。
filteredArray将是一个对象数组,其中object["code"] == findCode
编辑-如果您知道只有一个
...
let foundObject = array.filter{$0["code"] == findCode}.first
println(foundObject) // ["code": "ES", "name": "Spain"]
你可以做。。。
...
let country = array.filter{$0["code"] == findCode}.first?["name"] // updated, thanks @MikeS
if let unwrappedCountry = country {
println(unwrappedCountry) // "Spain"
}
您可以去掉外部的NSArray
,将字典数组折叠到一个将代码映射到名称的字典中,并在其中进行快速查找,如下所示:
let aDict = [
["code": "LT","name": "Lithuania"]
, ["code": "ME","name": "Montenegro"]
, ["code": "ES","name": "Spain"]
]
let dict = aDict.reduce(Dictionary<String,String>()) {
(var dict, e) in
dict[e["code"]!] = e["name"]!
return dict
}
print(dict["ES"]!)