【问题标题】:Accessing values from Dictionaries that are part of an Array in Swift从 Swift 中的数组中访问字典中的值
【发布时间】:2014-09-30 17:16:48
【问题描述】:

生日,

我正在尝试使用 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"]

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

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

【问题讨论】:

    标签: arrays dictionary swift


    【解决方案1】:

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

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

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

    你也可以使用紧凑的形式:

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

    请注意,此方法返回一个可选字符串数组,因为字典下标运算符总是返回一个可选字符串。如果你需要一个非可选数组,那么这是 unsafe 版本:

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

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

    有关map 的更多信息,请访问Swift Standard Template Library

    【讨论】:

    • 请注意,这实际上会创建 [String?] 而不是 [String]
    • @David 是正确的 - 感谢您指出这一点,错过了明确表示
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-05-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-17
        • 2023-04-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多