当前位置: 首页 > 面试题库 >

在Swift中搜索字典中的值

上官羽
2023-03-14
问题内容

我是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

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


问题答案:

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

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从左侧,与在右边的值替换它。



 类似资料:
  • 问题内容: 搜索一个值并获取父词典名称(键): 在以上字典中,我需要搜索类似的值:。其中,字典中没有任何值重复。如何搜索?因此它应该返回字典中的父键。 请注意 :解决方案应在 未修改的情况下 适用 于 Python 2.7和Python 3.3。 问题答案: 这是对嵌套dict的迭代遍历,还可以跟踪导致特定点的所有键。因此,一旦您在字典中找到正确的值,您就已经具有获取该值所需的键。 如果将以下代码

  • 问题内容: 我对Xcode在《 Swift编程语言指南》中给我进行此实验的答案感到有些困惑: 我知道随着字典的使用,最大的数字被设置为变量。但是,我对为什么Xcode会说要根据每次测试设置5次,1次或3次感到困惑。 查看代码时,我发现应该单独在“ Prime”中将其设置6次(2、3、5、7、11、13)。然后,它应该跳过“斐波那契”中的任何数字,因为这些数字都小于最大数字,该数字当前已从“ Pri

  • 问题内容: 假设我有这个: 并通过搜索“ Pam”作为名称,我想检索相关的字典: 如何实现呢? 问题答案: 你可以使用生成器表达式: 如果你需要处理不存在的商品,则可以按照用户Matt的 建议进行操作,并使用稍有不同的API提供默认值:

  • 问题内容: 我知道这个话题已经讨论过了,但是我无法解决寻找其他答案的问题,因此,对不起我了! 我需要按键对字典进行排序 所以我需要这样的字典 但是我做不到 我试过了 但是在我需要从该字典创建两个数组(键和值)之后,并使用该解决方案 给我错误 ’[((String,String)]]’没有名为’keys’的成员, 因为该解决方案未完全返回字典。 所以我尝试了另一种解决方案: 哪个效果很好,但是我不知

  • 问题内容: 我有一些这样的Python字典: 例如 我需要搜索字典中是否有字典,并使用来计算。但是,如果整个字典中没有任何字典,则需要继续 下一个 字典。 这是我的尝试: 问题答案: 你近了 如果您需要知道内部s中有多少个作为键,则可以: 之所以可行,是因为每个密钥只能进入一次,因此您只需测试密钥是否退出即可。返回或等于和,因此是的出现次数。

  • 问题内容: 是否有-(NSArray *)keysSortedByValueUsingSelector:(SEL)comparator的类似物? 如何在不强制转换为NSDictionary的情况下执行此操作? 我试过了,但这似乎不是一个好的解决方案。 例: 问题答案: 尝试: 更新: 从beta 3更新到新的数组语法和排序语义。请注意,我正在使用,而不是在最大程度上减少数组复制。该代码可以做得更紧