热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

在Swift中搜索字典数组的值

如何解决《在Swift中搜索字典数组的值》经验,为你挑选了3个好方法。

我是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>) -> Array {
    // 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

对于如何在这方面取得进展,我将不胜感激.我已经挖掘了一些例子,但我很快找到一个适用于我在这里尝试做的事情.



1> Airspeed Vel..:

在循环内部,您需要从字典中获取"最喜欢的饮料"条目,并将其附加到数组:

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

注意,if let drink =防范数组中没有这样的条目的可能性 - 如果没有,你得到一个nil回来,并且if正在检查它,只是添加条目,如果它不是零.

您有时可能会看到人们跳过该if let部分,而只是写let drink = character["favorite drink"]!,最后带有感叹号. 不要这样做.这被称为"强制解包"一个可选项,如果没有从字典返回的有效值,则程序将崩溃.

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

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

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

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

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



2> Antonio..:

Airspeed Velocity的答案非常全面,并提供了可行的解决方案。实现相同结果的一种更紧凑的方法是使用swift数组的filterand map方法:

func favoriteDrinksArrayForCharacters(characters:Array>) -> Array {
    // create an array of Strings to dump in favorite drink strings
    return characters.filter { $0["favorite drink"] != nil }.map { $0["favorite drink"]! }
}

过滤器使用闭包返回一个布尔值,该布尔值说明是否必须包含元素-在我们的例子中,它检查key是否存在元素"favorite drink"。此方法返回满足该条件的字典数组。

第二步使用该map方法将每个字典转换为与"favorite drink“键” 对应的值-考虑到字典查找总是返回一个可选值(以解决键丢失),并且过滤器已经排除了所有没有键的字典。该键的值,则可以安全地应用强制展开操作符!以返回非可选字符串。

合并后的结果是一个字符串数组-从我的游乐场复制来的:

["prune juice", "tea, Earl Grey, hot"]



3> Aleksey G...:
let drinks = characters.map({$0["favorite drink"]}) // [Optional("prune juice"), Optional("tea, Earl Grey, hot")]

要么

let drinks = characters.filter({$0["favorite drink"] != nil}).map({$0["favorite drink"]!}) // [prune juice, tea, Earl Grey, hot]


推荐阅读
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • 提升Python编程效率的十点建议
    本文介绍了提升Python编程效率的十点建议,包括不使用分号、选择合适的代码编辑器、遵循Python代码规范等。这些建议可以帮助开发者节省时间,提高编程效率。同时,还提供了相关参考链接供读者深入学习。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • 本文介绍了P1651题目的描述和要求,以及计算能搭建的塔的最大高度的方法。通过动态规划和状压技术,将问题转化为求解差值的问题,并定义了相应的状态。最终得出了计算最大高度的解法。 ... [详细]
  • 本文介绍了作者在开发过程中遇到的问题,即播放框架内容安全策略设置不起作用的错误。作者通过使用编译时依赖注入的方式解决了这个问题,并分享了解决方案。文章详细描述了问题的出现情况、错误输出内容以及解决方案的具体步骤。如果你也遇到了类似的问题,本文可能对你有一定的参考价值。 ... [详细]
  • SpringBoot整合SpringSecurity+JWT实现单点登录
    SpringBoot整合SpringSecurity+JWT实现单点登录,Go语言社区,Golang程序员人脉社 ... [详细]
  • Android自定义控件绘图篇之Paint函数大汇总
    本文介绍了Android自定义控件绘图篇中的Paint函数大汇总,包括重置画笔、设置颜色、设置透明度、设置样式、设置宽度、设置抗锯齿等功能。通过学习这些函数,可以更好地掌握Paint的用法。 ... [详细]
  • 本文整理了315道Python基础题目及答案,帮助读者检验学习成果。文章介绍了学习Python的途径、Python与其他编程语言的对比、解释型和编译型编程语言的简述、Python解释器的种类和特点、位和字节的关系、以及至少5个PEP8规范。对于想要检验自己学习成果的读者,这些题目将是一个不错的选择。请注意,答案在视频中,本文不提供答案。 ... [详细]
  • 花瓣|目标值_Compose 动画边学边做夏日彩虹
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Compose动画边学边做-夏日彩虹相关的知识,希望对你有一定的参考价值。引言Comp ... [详细]
  • 后台自动化测试与持续部署实践
    后台自动化测试与持续部署实践https:mp.weixin.qq.comslqwGUCKZM0AvEw_xh-7BDA后台自动化测试与持续部署实践原创 腾讯程序员 腾讯技术工程 2 ... [详细]
  • iOS Xcode汇编模式切换的方法介绍
    一、概念 1.汇编指令:模拟器上运行的是Intel指令,而真机上运行的是arm指令, 2.每条汇编指令的格式总是由: 操作码,操作 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了iOS开发--漫谈内存管理相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了logistic回归(线性和非线性)相关的知识,包括线性logistic回归的代码和数据集的分布情况。希望对你有一定的参考价值。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 给定一个二维平面上的一些点,通过计算曼哈顿距离,求连接所有点的最小总费用。只有任意两点之间有且仅有一条简单路径时,才认为所有点都已连接。给出了几个示例并给出了对应的输出。 ... [详细]
author-avatar
玩玩r28g
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有