Swift 中 map 和 flatMap 的区别 (入门版)

在 Swift 中,mapflatMap 是用于处理集合类型(如数组、字典、集合等)的两个重要方法。尽管它们看起来相似,但它们在处理集合中的元素和结果时有着不同的行为。

map 方法

map 方法会对集合中的每一个元素应用一个变换(transform)函数,并返回一个包含所有变换后的新集合。结果集合的结构与原集合保持一致。

示例:

let numbers = [1, 2, 3, 4, 5]
let squares = numbers.map { $0 * 2 }
print(squares) // 输出: [2, 4, 6, 8, 10]

在这个例子中,每个数字都乘以 2,然后 map 返回一个包含这些结果的新数组。

flatMap 方法

flatMap 方法首先会对集合中的每一个元素应用一个变换函数,然后将所有结果“展平”到一个新的集合中。

示例:

let nestedNumbers = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
let flatNumbers = nestedNumbers.flatMap { $0 }
print(flatNumbers) // 输出: [1, 2, 3, 4, 5, 6, 7, 8, 9]

在这个例子中,flatMap 首先应用变换函数,将每个子数组提取出来,然后将所有子数组展平为一个单一的数组。

处理可选类型(Optional)

flatMap 在处理可选类型时非常有用,它会自动解包可选值并过滤掉 nil 值,而 map 则会保留 nil

示例:

let numbers: [Int?] = [1, 2, nil, 4, nil, 5]
let mappedNumbers = numbers.map { $0 }
print(mappedNumbers) // 输出: [Optional(1), Optional(2), nil, Optional(4), nil, Optional(5)]let flatMappedNumbers = numbers.flatMap { $0 }
print(flatMappedNumbers) // 输出: [1, 2, 4, 5]

在这个例子中,flatMap 会解包可选值并移除 nil 值,而 map 会保留 nil 值。

总结

  • map:对每个元素应用变换函数,返回一个与原集合结构相同的新集合。
  • flatMap:对每个元素应用变换函数,然后将结果展平成一个新的集合,特别适用于处理嵌套集合或可选类型。

选择使用 map 还是 flatMap 取决于具体需求。如果只需要对集合中的元素进行变换并保留原结构,使用 map;如果需要展平嵌套集合或处理可选类型,使用 flatMap

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/43964.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ubuntu 24.04 LTS (Linux) 安装二维码生成工具 QRencode 二维码生成和识别

1 Ubuntu 安装 sudo apt update sudo apt-get install qrencode 2 查看版本 qrencode -V 3 生成二维码 qrencode -o test.png http://www.baidu.com 可以下载test.png图片,用手机浏览器扫描下看(⊙﹏⊙)

寄存器访问使用5a、a5、0f、f0的作用

寄存器访问用的典型值及作用 5a、a5 5a8’b01011010 a58’b10100101 用以检查相邻两个比特信号是否连接错误 0f、f0 0f8’b00001111 f08’b11110000 用以检查比特信号是否tie 0 或者tie 1

深度解析 PostgreSQL Protocol v3.0(三)— 流复制(上)

01 流复制介绍 PostgreSQL 支持 COPY 操作,COPY 操作通过流复制协议(Streaming Replication Protocol)实现。COPY 命令允许在服务器之间进行高速批量数据传输,有三种流复制模式: COPY-IN 模式 数据从客户端传输到服…

Linux grep技巧 结合awk查询

目录 一. 前提1.1 数据准备1.2 数据说明 二. 查询2.1 统计每个加盟店搜索的次数 一. 前提 1.1 数据准备 ⏹file1.log 140 2024/07/08 12:35:01.547 c1server2 5485 [ERROR] SPLREQUEST seqNo11459,eventControllerPMT.payinfoforprc.test.search,oldest_data_search2 110 20…

FPGA 项目菜单功能比较

为了帮助您更好地理解每个FPGA功能模块的实用场合、区别和特点,以下是详细的比较: 功能模块实用场合区别特点FPGA I/O自动控制系统、数据采集系统直接与FPGA板卡上的物理端口交互,配置和使用外部I/O设备灵活配置输入输出端口,支持…

Navicat 17 新特性 | 原生支持 Linux ARM 平台以及银河麒麟和统信操作系统

随着 Navicat 17 的发布,引起了业界的广泛共鸣与热烈讨论。此前,我们深入探讨了Navicat 17的多项新特性,涵盖《模型设计:引领创新,优化升级》,《高效的查询与配置》以及《用户界面交互:流畅体验…

Day62 单调栈part01

LC739每日温度(未掌握) 暴力解法:两层for循环,时间复杂度O(n^2),会超时未掌握原因分析:只想到了从栈顶到栈底是递减的情况,忽略了从栈顶到栈底是递增的情况 因为需要找到一个元素右边第一个更大元素,只有…

寂静孤独的404页面源码

寂静孤独的404页面源码,灯光闪烁动态效果,源码由HTMLCSSJS组成,记事本打开源码文件可以进行内容文字之类的修改,双击html文件可以本地运行效果,也可以上传到服务器里面,重定向这个界面 寂静孤独的404页面源…

【深度学习】PyTorch深度学习笔记01-Overview

参考学习:B站视频【《PyTorch深度学习实践》完结合集】-刘二大人 ------------------------------------------------------------------------------------------------------- 1. 基于规则的深度学习 2. 经典的机器学习——手动提取一些简单的特征 3. 表示学习…

js 回调函数如何追加参数

先来点逼格的,使用高阶函数如何处理。 // 原始的回调函数 function originalCallback(a, b) {console.log(a, b); // 输出: 10, 20 }// 高阶函数,用于追加参数并调用原始回调函数 function appendArgs(callback, ...additionalArgs) {return function(.…

深入理解 LXC (Linux Containers)

目录 引言LXC 的定义LXC 的架构LXC 的工作原理LXC 的应用场景LXC 在 CentOS 上的常见命令实验场景模拟总结 1. 引言 在现代 IT 基础设施中,容器技术已经成为一种重要的应用和部署方式。与虚拟机相比,容器具有更高的效率、更轻量的特性和更快的启动速度…

AI应用观:从“卷模型”到“卷应用”的时代跨越

在2024年世界人工智能大会的舞台上,百度创始人李彦宏的发言如同一股清流,为当前如火如荼的人工智能领域注入了深刻的思考。他提出的“大家不要卷模型,要卷应用”的观点,不仅是对当前AI技术发展趋势的精准洞察,更是对未…

【PB案例学习笔记】-30动态打开窗口

写在前面 这是PB案例学习笔记系列文章的第30篇,该系列文章适合具有一定PB基础的读者。 通过一个个由浅入深的编程实战案例学习,提高编程技巧,以保证小伙伴们能应付公司的各种开发需求。 文章中设计到的源码,小凡都上传到了gite…

Mosh|内连接、外连接、左连接、右连接(未完)

下图取自菜鸟教程,侵权删~ 一、内连接:Inner Joins 模版:SELECT * FROM A JOIN B ON 条件 含义:返回A与B的交集,列为AB列之和 练习:将order_items表和products表连接,返回产品id和…

Linux C++ 046-设计模式之策略模式

Linux C 046-设计模式之策略模式 本节关键字:Linux、C、设计模式、策略模式 相关库函数: 概念 策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。&…

【普中】基于51单片机的矩阵电子密码锁LCD1602液晶显示 proteus仿真+程序+设计报告+讲解视频

【普中】基于51单片机的矩阵电子密码锁LCD1602液晶显示设计 1.主要功能:讲解视频:2.仿真3. 程序代码4. 设计报告5. 设计资料内容清单&&下载链接资料下载链接: 【普中】基于51单片机的矩阵电子密码锁LCD1602液晶显示设计 ( proteus仿真…

debian或Ubuntu中开启ssh允许root远程ssh登录的方法

debian或Ubuntu中开启ssh允许root远程ssh登录的方法 前因: 因开发需要,需要设置开发板的ssh远程连接。 操作步骤如下: 安装openssh-server sudo apt install openssh-server设置root用户密码: sudo passwd root允许root用户…

Java继承练习(4) (2024.7.9)

人类 package Work20240709;public class Person {String name;String gender;int age;String nationality;public Person() {}public Person(String name, String gender, int age, String nationality) {this.name name;this.gender gender;this.age age;this.nationalit…

Androidstudio开发,天气预报APP

1.项目功能思维导图 2. 项目涉及到的技术点 数据来源:和风天气API使用okhttp网络请求框架获取api数据使用gson库解析json数据使用RecyclerViewadapter实现未来7天列表展示和天气指数使用PopupMenu 实现弹出选项框使用动画定时器实现欢迎页倒计时和logo动画使用Text…

使用 Vue 3 实现打字机效果

在现代前端开发中,添加一些视觉效果可以提升用户体验。其中,打字机效果是一种常见且吸引人的效果,可以用于展示动态文本。本文将介绍如何在 Vue 3 中实现打字机效果。 实现步骤 1. 创建自定义指令 我们首先创建一个自定义指令 v-typewriter…