从作为Swift中Array的一部分的Dictionaries访问值

时间:2014-09-30 17:16:49

标签: arrays dictionary swift

G'天,

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

例如,

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

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

let arrayOfDictionaries = [dictionaryOne, dictionaryTwo]

我尝试使用for循环创建一个函数,该循环将输出一个包含位置值的数组,即[" Milwaukee"," Denver"]

我查看了其他回复,但我只能找到如何访问" location"的值。直接来自字典本身,如果有许多不同的字典而不是两个字典,这将是麻烦的。

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

3 个答案:

答案 0 :(得分:2)

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

arrayOfDictionaries.map { (dict: [String : String]) -> String? in
    return dict["location"]
}

传递给map的闭包接收一个数组元素,并返回转换后的值 - 在您的情况下,它检索并返回location键的值。

您也可以使用紧凑形式:

arrayOfDictionaries.map { $0["location"] }

请注意,此方法返回一个可选字符串数组,因为字典下标运算符始终返回一个可选字符串。如果您需要非选项数组,那么这是不安全版本:

let x = arrayOfDictionaries.map { $0["location"]! }

当然如果" location"的值对于数组元素,key不存在,将引发运行时异常。

有关Swift Standard Template Library

map的更多信息

答案 1 :(得分:0)

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

let locations = (arrayOfDictionaries as NSArray).valueForKey("location") as [String]

答案 2 :(得分:0)

我看到它的方式,你将从之前列出的城市填充一个新的字符串数组。

var locations = [String]()

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

println(locations)