在Swift中的几个字典中访问键的值

时间:2015-09-03 22:09:59

标签: ios swift dictionary

我是Swift的新手,我正在尝试做的是从两个词典中访问最喜欢的饮料键并返回两者的值 所以,最喜欢的饮料会返回一系列这样的饮料[“西梅汁”,“茶,伯爵茶”]

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

}

如果这是客观的 - 我会这样做

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

3 个答案:

答案 0 :(得分:0)

您可能希望使用map函数,该函数将代码应用于集合的每个元素:

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

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

答案 1 :(得分:0)

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

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

“(key,value)”是一个元组,这就是字典很好地销售的。

答案 2 :(得分:0)

我几乎已经使用@ 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
})