使用Swift对NSArray中的NSDictionary进行模式匹配



我在操场中有这个代码

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

最新更新