Swift --> Map & FlatMap
转载自:https://segmentfault.com/a/1190000004050907
Map
map函数能够被数组调用,它接受一个闭包作为参数,作用于数组中的每个元素。闭包返回一个变换后的元素,接着将所有这些变换后的元素组成一个新的数组。
这听起来有些复杂,但它是相当简单的。想象你拥有一个string类型的数组:
let testArray = ["test1","test1234","","test56"]
map函数的闭包接收一个字符串(类型为string)作为参数,原因在于我们调用函数处理的数组元素类型为String。本例中,我们想要返回一个整型数组,逐个对应字符串元素成员的字符长度。因此闭包的返回类型为Int?.
let anotherArray = testArray.map { (string:String) -> Int? in
let length = string.characters.count
guard length > 0 else {
return nil
}
return string.characters.count
}
print(anotherArray) //[Optional(5), Optional(8), nil, Optional(6)]
FlatMap
flatMap很像map函数,但是它摒弃了那些值为nil的元素。
let anotherArray2 = testArray.flatMap { (string:String) -> Int? in
let length = string.characters.count
guard length > 0 else {
return nil
}
return string.characters.count
}
print(anotherArray2) //[5, 8, 6]
另外一个与map函数不同之处在于:倘若元素值不为nil情况下,flapMap函数能够将可选类型(optional)转换为非可选类型(non-optionals)。
引用
Image:@ Fly_dragonfly / shutterstock.com
本文由 SwiftGG 翻译组翻译,已经获得作者翻译授权,最新文章请访问 http://swift.gg。
Swift --> Map & FlatMap的更多相关文章
- RxJava【变换】操作符 map flatMap concatMap buffer MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- Spark 学习笔记之 map/flatMap/filter/mapPartitions/mapPartitionsWithIndex/sample
map/flatMap/filter/mapPartitions/mapPartitionsWithIndex/sample:
- map & flatMap 浅析
我之前一直以为我是懂 map 和 flatMap 的.但是直到我看到别人说:「一个实现了 flatMap 方法的类型其实就是 monad.」我又发现这个熟悉的东西变得陌生起来,本节烧脑体操打算更细致一 ...
- RxSwift学习笔记7:buffer/window/map/flatMap/flatMapLatest/flatMapFirst/concatMap/scan/groupBy
1.buffer的基本使用 let publishSubject = PublishSubject<String>() //buffer 方法作用是缓冲组合,第一个参数是缓冲时间,第二个参 ...
- Swift map filter reduce 使用指南
转载:https://useyourloaf.com/blog/swift-guide-to-map-filter-reduce/ Using map, filter or reduce to ope ...
- java1.8 新特性(五 如何使用filter,limit ,skip ,distinct map flatmap ,collect 操作 java集合)
使用filter 根据 条件筛选 出结果:例如 找出 user 中 age >=15 的用户 package lambda.stream; /** * @author 作者:cb * @vers ...
- java8 map flatmap
map: 对于Stream中包含的元素使用给定的转换函数进行转换操作,新生成的Stream只包含转换生成的元素.这个方法有三个对于原始类型的变种方法,分别是:mapToInt,mapToLong和ma ...
- SparkContext, map, flatMap, zip以及例程wordcount
SparkContext 通常作为入口函数,可以创建并返回一个RDD. 如把Spark集群当作服务端那Spark Driver就是客户端,SparkContext则是客户端的核心: 如注释所说 Spa ...
- 理解Swift中map 和 flatMap对集合的作用
map和flatMap是函数式编程中常见的概念,python等语言中都有.借助于 map和flapMap 函数可以非常轻易地将数组转换成另外一个新数组. map函数可以被数组调用,它接受一个闭包作为參 ...
随机推荐
- linux命令 awk
awk的工作流程如下: 读入有 '\n' 换行符分割的一跳记录,然后将记录按指定的域分隔划分域,填充域,$0 表示所有域, $1 表示第一个域, $n 表示第n个域.默认域分隔符为“空白键”或者“[t ...
- [转]详细的mysql时间和日期函数
这里是一个使用日期函数的例子.下面的查询选择了所有记录,其date_col的值是在最后30天以内: mysql> SELECT something FROM table WHERE TO_DAY ...
- 杭电21题 Palindrome
Problem Description A palindrome is a symmetrical string, that is, a string read identically from le ...
- angular中重要指令介绍($eval,$parse和$compile)
在angular的服务中,有一些服务你不得不去了解,因为他可以说是ng的核心,而今天,我要介绍的就是ng的两个核心服务,$parse和$compile.其实这两个服务讲的人已经很多了,但是100个读者 ...
- 《JavaScript高级程序设计》读书笔记 ---操作符一
一元操作符只能操作一个值的操作符叫做一元操作符.一元操作符是ECMAScript 中最简单的操作符. 1. 递增和递减操作符递增和递减操作符直接借鉴自C,而且各有两个版本:前置型和后置型.顾名思义,前 ...
- svn hooks的使用demo
我是理论家: svn server端提供了Hooks Script.所谓钩子实际上是一种时间触发机制,是指当系统执行到某个特殊的事件时,触发我们预定义的动作,可以让我们在某些特定状态发生的时候做我们想 ...
- iOS tableView的系统分割线定格设置以及分割线自定制
一.关于分割线的位置. 分割线的位置就是指分割线相对于tableViewCell.如果我们要根据要求调节其位置,那么在iOS7.0版本以后,提供了一个方法如下: if ([self.tableView ...
- VBS基础篇 - 杂项 - Sendkeys
VBS基础篇 - 杂项 - Sendkeys 模拟键盘操作,将一个或多个按键指令发送到指定Windows窗口来控制应用程序运行 其使用格式为:object.SendKeys(string) obj ...
- JavaScript 错误 - Throw、Try 和 Catch
http://www.w3school.com.cn/js/js_errors.asp try 语句测试代码块的错误.catch 语句处理错误.throw 语句创建自定义错误. 错误一定会发生 当 J ...
- 授权给指定用户,使用navicat在其他ip都可以连接linux服务器上的mysql库
grant all privileges on ao.* to 'tony'@'localhost' identified by '123456'; 在ao库中所有表. 同意 ,授权 给ton ...