iis服务器助手广告广告
返回顶部
首页 > 资讯 > 移动开发 >Swift 进阶 —— map 和 flatMap的使用
  • 788
分享到

Swift 进阶 —— map 和 flatMap的使用

SwiftmapflatMap 2022-06-02 01:06:14 788人浏览 独家记忆
摘要

map 和 flatMap 主要分在集合上的使用和在可选类型上的使用,下面分别来看下。 集合上使用 map 和 flatMap 先看如下的代码: func getInfos(by

map 和 flatMap 主要分在集合上的使用和在可选类型上的使用,下面分别来看下。

集合上使用 map 和 flatMap

先看如下的代码:


func getInfos(by name: String) -> [String] {
 if name == "Jack" {
 return ["Male", "25", "New York"]
 } else if name == "Lucy" {
 return ["Female", "18", "London"]
 } else {
 return ["Unkown", "Unkown", "Unkown"]
 }
}

let names = ["Jack", "Lucy", "Nobody"]

let infos1 = names.map { getInfos(by: $0) }
print(infos1)

let infos2 = names.flatMap { getInfos(by: $0) }
print(infos2)

输入是一个一维数组,转换后 infos1 的结果是如下的一个二维数组,所以 map 后有两层结构:


[["Male", "25", "New York"], ["Female", "18", "London"], ["Unkown", "Unkown", "Unkown"]]

输入是一个一维数组,转换后 infos2 的结果是如下的一个一维数组,所以 flatMap 后只有一层结构:


["Male", "25", "New York", "Female", "18", "London", "Unkown", "Unkown", "Unkown"]

map 在 Array 上的实现大致如下:


extension Array {
 func map<T>(_ transfORM: (Element) -> T) -> [T] {
 var result: [T] = []
 for x in self {
  result.append(transform(x))
 }
 return result
 }
}

flatMap 在 Array 上的实现大致如下:


extension Array {
 func flatMap<T>(_ transform: (Element) -> [T]) -> [T] {
 var result: [T] = []
 for x in self {
  result.append(contentsOf: transform(x))
 }
 return result
 }
}

可选类型上使用 map 和 flatMap

如下代码中,输入是 stringNumbers.first,其类型是 String?

  • 转换后 x 的类型是 Int??,所以 map 后有两层 Optional
  • 转换后 y 的类型是 Int?,所以 flatMap 后只有一层 Optional

let stringNumbers = ["1", "2", "3", "foo"]
let x = stringNumbers.first.map { Int($0) } // Optional(Optional(1))
let y = stringNumbers.first.flatMap { Int($0) } // Optional(1)

map 在 Optional 上的实现大致如下:


extension Optional {
 func map<U>(transform: (Wrapped) -> U) -> U? {
 if let value = self {
  return transform(value)
 }
 return nil
 }
}

flatMap 在 Optional 上的实现大致如下:


extension Optional {
 func flatMap<U>(transform: (Wrapped) -> U?) -> U? {
 if let value = self, let transformed = transform(value) {
  return transformed
 }
 return nil
 }
}

以上就是Swift 进阶 - 详解map 和 flatMap的详细内容,更多关于Swift map 和 flatMap的资料请关注编程网其它相关文章!

--结束END--

本文标题: Swift 进阶 —— map 和 flatMap的使用

本文链接: https://www.lsjlt.com/news/30434.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • map 和 flatMap 的区别
    一、map 和 flatMap 对应的源码 ① map方法 Stream map(Function...
    99+
    2023-09-07
    intellij-idea 大数据 java
  • RxJava中map和flatMap的用法区别源码解析
    目录前言:作用使用方法:mapflatMap源码分析mapflatMap结语前言: RxJava中提供了大量的操作符,这大大提高了了我们的开发效率。其中最基本的两个变换操作符就是ma...
    99+
    2024-04-02
  • Java中stream处理中map与flatMap的比较和使用案例
    前言 使用Java8的新特性Stream流式处理,可以提高对于集合的一些操作效率,再配合lambda表达式,可以极致的简化代码,尤其还有并行流这个东东,可以去 了解一下,在一些场合...
    99+
    2024-04-02
  • Python高阶函数map()简介和使用详解
    目录简介:示例:示例(1):输出map()函数返回值(迭代器)结果示例(2):与循环对比示例(3):字符串转列表示例(4):元组转列表示例(5):提取字典的键key,通过函数作用放入...
    99+
    2023-03-03
    Python 高阶函数map使用 Python map函数
  • 一键秒懂:Java Map的深层奥秘和进阶宝典
    Map的基本原理 Map是一种数据结构,用于存储键值对。键是用来标识值的唯一标识符,值是与键相关联的数据。Map中的元素是无序的,这意味着键值对没有任何特定的顺序。 Java中Map的实现基于哈希表。哈希表是一种数据结构,它使用哈希函数...
    99+
    2024-02-05
    Java Map 键值对 哈希表 红黑树 碰撞 负载因子 迭代器
  • Python高阶函数map()怎么使用
    这篇文章主要介绍了Python高阶函数map()怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Python高阶函数map()怎么使用文章都会有所收获,下面我们一起来看看吧。简介:格式:map(funct...
    99+
    2023-07-05
  • HTML5进阶FileReader的使用
    FileReader 对象FileReader 对象主要用来把文件读入内存,并且读取文件中的数据。通过构造函数创建一个 FileReader 对象。...
    99+
    2023-06-03
  • 怎样进行SoapUI的进阶使用
    这期内容当中小编将会给大家带来有关怎样进行SoapUI的进阶使用,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。关于SoapUI的简单使用,大家可以参考网上并自己摸索下,这里就不说了,下面说的是一些不常见的...
    99+
    2023-06-17
  • 69.Protobuf进阶——使用Pyt
    定义addressbookproto 编译Protocol buffer 使用Python的Protobuf API 枚举 标准message方法 序列化和解析 将message写入文件 从文件读取message对象 me...
    99+
    2023-01-31
    进阶 Protobuf Pyt
  • Python 3 进阶 —— 使用 P
    PyMySQL 是一个纯 Python 实现的 MySQL 客户端操作库,支持事务、存储过程、批量执行等。 PyMySQL 遵循 Python 数据库 API v2.0 规范,并包含了 pure-Python MySQL 客户端库。 安装...
    99+
    2023-01-31
    进阶 Python
  • 详解Python中高阶函数(map,filter,reduce,sorted)的使用
    目录什么是高阶函数自定义一个高阶函数常用的内置高阶函数map函数参数说明功能实例filter函数功能实例reduce函数功能实例sorted函数参数说明功能实例sort和sorted...
    99+
    2024-04-02
  • 进阶JAVA篇- Map 系列集合的遍历方法与常用API
    目录         1.0 Map 集合的说明         1.1 Map 集合的常用方法         1.2 Map 系列集合的特点         2.0 Map 系列集合的遍历方法(三种方法)          2.1 使用...
    99+
    2023-10-25
    java 开发语言
  • Golang函数的进阶使用指南
    go 函数的进阶用法包括:闭包:可访问外部变量的内部函数,用于附加状态或延迟执行。变参函数:接收可变数量相同类型参数的函数,表示为 ...t 切片。递归函数:调用自身的函数,用于解决可分...
    99+
    2024-04-15
    函数 golang
  • 【MySQL】MySQL数据库的进阶使用
    别灰心,一切都会好起来的… 文章目录 一、MySQL基本查询1.对表内容进行Create(增加)1.1 insert语句的使用1.2 插入查询结果(删除表中的重复记录) 2.对表内容进行Retrieve(读取)3.对表内容进...
    99+
    2023-08-17
    数据库 mysql
  • Swift中的高阶函数功能有什么作用
    这篇“Swift中的高阶函数功能有什么作用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Swift中的高阶函数功能有什么作用...
    99+
    2023-07-05
  • @EnableAsync的使用、进阶、源码分析
    @EnableAsync使用 基础使用 使用@EnableAsync开启异步切面,然后在异步调用的方法上加上@Asyc注解即可 @SpringBootApplication@EnableAsync /...
    99+
    2023-10-24
    java spring
  • git进阶的用法
    在开发领域,Git是一种强大的版本控制工具。它能够帮助开发者轻松地管理多个代码版本,从而使团队协作更加高效。虽然Git已经成为程序员的常用工具,但是很多人只是使用基础功能而无法发挥Git的全部威力。本文将介绍Git的进阶用法,帮助读者更好地...
    99+
    2023-10-22
  • 掌握Java Map的精髓,进阶学习者的必备技能
    Java Map是一种数据结构,它允许您使用键来存储和检索值。Map中的键是唯一的,这意味着您不能使用相同的键存储两个值。Map中的值可以是任何对象,包括其他Map。 Map在Java中有很多用途。例如,您可以使用Map来存储用户ID和...
    99+
    2024-02-05
    Java Map 数据结构 哈希表 键值对 HashMap ConcurrentHashMap
  • Spring Cloud Alibaba Nacos Config进阶使用
    目录一、SpringBoot 使用 Nacos Config 实现多环境切换1. 现象2. 引入依赖3. 添加bootstrap.yaml配置文件4. 配置对应关系图5. 文件格式简...
    99+
    2024-04-02
  • JavaScript中forEach和map的使用场景
    目录foeEachforEach方法是同步执行的,不能使用异步操作。mapmap方法不会遍历已经添加并且未被删除的元素。什么是迭代器模式JavaScript 的 forEach 和 ...
    99+
    2023-05-18
    JavaScript forEach map  forEach map
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作