【问题标题】:Accessing the value to a key in a couple of dictionaries in Swift在 Swift 中访问几个字典中的键的值
【发布时间】:2015-09-03 22:09:58
【问题描述】:

我是 Swift 的新手,我想做的是从两个字典中访问最喜欢的饮料键并返回两者的值 所以,最喜欢的饮料会返回一系列类似这样的饮料 [“prune juice”、“tea, Earl Grey”]

let worf = [
"name": "Worf",
"rank": "lieutenant",
"information": "son of Mogh, slayer of Gowron",
"favorite drink": "prune juice",
"quote" : "Today is a good day to die."]

let picard = [
"name": "Jean-Luc Picard",
"rank": "captain",
"information": "Captain of the USS Enterprise",
"favorite drink": "tea, Earl Grey"]

let characters = [worf, picard]

func favoriteDrinksArrayForCharacters(characters:Array<Dictionary<String, String>>) -> Array<String> {

let favoriteDrinks = favoriteDrinksArrayForCharacters(characters)
//missing step?
return favoriteDrinks

}

如果这是客观 c 我会这样做

NSArray *favoriteDrinksForCharacters = [charactersArray valueForKey:@"favorite drink"]; 
return favoriteDrinksForCharacters; 

【问题讨论】:

  • 使用return characters["favorite drink"]有什么问题?

标签: ios swift dictionary


【解决方案1】:

您可能想要使用map 函数,它将代码应用于集合的每个元素:

return characters.map { $0["favorite drink"]! }

括号部分是closure,可以包含任意复杂的代码。 ! 是因为字典下标可能返回 nil。

【讨论】:

    【解决方案2】:

    作为替代方案,您还可以检查基于 swift 的字典中的内容:

    for (key, value) in dictionary {
        println("Key = \(key), and Value = \(value)")
    }
    

    “(键,值)”是一个元组,这是字典很好地出售的。

    【讨论】:

      【解决方案3】:

      我几乎会接受@zneak 的回答,但它需要一个隐式展开的可选(龙——或偷偷摸摸的崩溃——在这里)。

      一个更好的解决方案是:

      let favouriteDrinks: [String] = characters.reduce([], combine: { (result: [String], character: [String: String]) -> [String] in
          if let favouriteDrink: String = character["favorite drink"] {
              return result + [favouriteDrink]
          }
          return result
      })
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-25
        相关资源
        最近更新 更多