ios - 在 Swift 中搜索字典数组以获取值

标签 ios arrays xcode swift dictionary

我是 Swift 的新手,正在上课学习 iOS 编程。我发现自己对如何在字典数组中搜索字符串值并将字符串值转储到数组中感到困惑。这是从我的 Xcode playground 中获取的。

我正在尝试弄清楚如何: 1)搜索一系列字典 2) 将搜索结果转储到一个数组(我创建的数组)中

这些是字符字典。

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, hot"]

这是上面列出的字符字典的数组。

let characters = [worf, picard]

这是我要编写的函数。

func favoriteDrinksArrayForCharacters(characters:Array<Dictionary<String, String>>) -> Array<String> {
    // create an array of Strings to dump in favorite drink strings
    var favoriteDrinkArray = [String]()

    for character in characters {
        // look up favorite drink

        // add favorite drink to favoriteDrinkArray
    }

    return favoriteDrinkArray
}

let favoriteDrinks = favoriteDrinksArrayForCharacters(characters)

favoriteDrinks

如果您能就如何推进此事提供任何帮助,我将不胜感激。我已经四处寻找示例,但我很快就找不到适用于我在这里尝试做的事情的示例。

最佳答案

在循环内,您需要从字典中获取“favorite drink”条目,并将其附加到数组中:

for character in characters {
    if let drink = character["favorite drink"] {
        favoriteDrinkArray.append(drink)
    }
}

请注意,if let drink = 防止数组中没有这样的条目的可能性——如果没有,你会得到一个 nil,并且if 正在检查它,只有在它不是 nil 时才添加条目。

有时您可能会看到人们跳过 if let 部分,而只是写 let drink = character["favorite drink"]!,并在末尾加上感叹号. 不要这样做。这被称为“强制展开”可选值,如果字典中没有返回有效值,您的程序就会崩溃。

第一个示例的行为是,如果没有饮料,则不会将其添加到数组中。但这可能不是您想要的,因为您可能期望字符数组中的条目与饮料数组中的条目之间存在一对一的对应关系。

如果是这种情况,并且您可能想要一个空字符串,您可以改为这样做:

func favoriteDrinksArrayForCharacters(characters: [[String:String]]) -> [String] {
    return characters.map { character in
        character["favorite drink"] ?? ""
    }
}

.map 的意思是:遍历 characters 中的每个条目,并将运行此表达式的结果放入一个新数组(然后返回)。

?? 的意思是:如果您从左侧返回一个 nil,请将其替换为右侧的值。

关于ios - 在 Swift 中搜索字典数组以获取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28203443/

相关文章:

iOS 无法检查对象是否为空

ios - 在 iOS 中,alpha 为 0.5 的 shadowColor 和设置为 0.5 的 shadowOpacity 有区别吗?

ios - 调用 sizeToFit 时,UIButton 无法使用自定义字体正确调整高度

java - 初始化数组列表的简洁方法

c - 指针数组 - 内存分配

ios - Xcode 中的 iPad 序列错误

ios - 使用 faSTLane/gym 导出未签名的 ipa

ios - 将数组发送到 View Controller

C++ 从函数返回数组

xcode - XCode中的OpenCV -cmake错误