Arrays 从作为Swift数组一部分的字典中访问值

Arrays 从作为Swift数组一部分的字典中访问值,arrays,dictionary,swift,Arrays,Dictionary,Swift,G'day 我试图使用for循环来访问Swift中字典数组中相同键的值 比如说, let dictionaryOne = [ "name": "Peter", "age": "42", "location": "Milwaukee"] let dictionaryTwo = [ "name": "Paul",

G'day

我试图使用for循环来访问Swift中字典数组中相同键的值

比如说,

let dictionaryOne = [
                    "name": "Peter",
                    "age": "42",
                    "location": "Milwaukee"]

let dictionaryTwo = [
                    "name": "Paul",
                    "age": "89",
                    "location": "Denver"]

let arrayOfDictionaries = [dictionaryOne, dictionaryTwo]
我正在尝试使用for循环创建一个函数,该循环将输出一个包含位置值的数组,即[“密尔沃基”、“丹佛”]

我看过其他的回答,但我只能找到如何直接从字典本身访问“location”的值,如果有很多不同的字典而不是只有两个字典,这将很麻烦


非常感谢您提供的任何帮助

有几种方法可以做到这一点。一种是使用键值编码(KVC):


在我看来,您将从前面列出的城市填充一个新的字符串数组

var locations = [String]()

for dictionary in arrayOfDictionaries{
    locations.append(dictionary["location"]!)
}

println(locations)

您可以利用
map
方法,其目的是在数组中循环并将每个元素转换为另一种类型:

arrayOfDictionaries.map { (dict: [String : String]) -> String? in
    return dict["location"]
}
传递给映射的闭包接收一个数组元素,并返回转换后的值——在您的例子中,它检索并返回
位置
键的值

您也可以使用压缩格式:

arrayOfDictionaries.map { $0["location"] }
请注意,此方法返回可选字符串数组,因为字典下标运算符始终返回可选字符串。如果您需要非可选的数组,则这是不安全的版本:

当然,如果数组元素的“location”键的值不存在,则会引发运行时异常


关于
map
的更多信息,请注意,这实际上会创建[String?]而不是[String]@David,这是正确的-感谢您指出这一点,我没能明确地说出来
arrayOfDictionaries.map { $0["location"] }
let x = arrayOfDictionaries.map { $0["location"]! }