![](/img/trans.png)
[英]Swift 3 - Filter and sort array of dictionaries, by dictionary values, with values from array
[英]Accessing values from Dictionaries that are part of an Array in Swift
天儿真好,
我正在尝试使用一个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”的值的方法,如果存在许多不同的字典,而不仅仅是两个,那将很麻烦。
非常感谢您提供的任何帮助!
您可以利用map
方法,其目的是循环遍历数组并将每个元素转换为另一种类型:
arrayOfDictionaries.map { (dict: [String : String]) -> String? in
return dict["location"]
}
传递给地图的闭包接收一个数组元素,并返回转换后的值-在您的情况下,它检索并返回location
键的值。
您也可以使用紧凑形式:
arrayOfDictionaries.map { $0["location"] }
请注意,此方法返回可选字符串数组,因为字典下标运算符始终返回可选字符串。 如果您需要非可选数组,那么这是不安全的版本:
let x = arrayOfDictionaries.map { $0["location"]! }
当然,如果数组元素的“位置”键值不存在,则会引发运行时异常。
Swift标准模板库中有关map
更多信息
有几种方法可以做到这一点。 一种是使用键值编码(KVC):
let locations = (arrayOfDictionaries as NSArray).valueForKey("location") as [String]
我的看法是,您将从以前列出的城市中填充新的字符串数组。
var locations = [String]()
for dictionary in arrayOfDictionaries{
locations.append(dictionary["location"]!)
}
println(locations)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.