一尘不染

在Swift中搜索字典中的值

swift

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

我正在尝试找出方法: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

对于在此方面取得进展的任何帮助,我将不胜感激。我已经为示例进行了挖掘,但是我很快就会找到一个适用于我在此尝试执行的操作的示例。


阅读 327

收藏
2020-07-07

共1个答案

一尘不染

在循环内部,您需要从字典中获取“收藏的饮料”条目,并将其附加到数组中:

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

请注意,if let drink =谨防数组中没有此类条目的可能性–如果没有,您将得到一个nil返回,并且进行if检查,仅在不为null时添加该条目。

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

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

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

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

.map方法:通过在每个条目运行characters,并把运行在一个新的数组这个表达式(你然后返回)的结果。

??手段:如果你得到一个nil从左侧,与在右边的值替换它。

2020-07-07