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函数可以被数组调用,它接受一个闭包作为參 ...
随机推荐
- JSP+Servlet实现上传下载
0.项目结构 1.在WebRoot下创建index.jsp页面 <%@ page language="java" import="java.util.*" ...
- 1、Spring概述
Java EE优缺点 我们都知道在2003年Spring兴起之前,企业普遍使用J2EE技术来开发企业级应用,为什么用J2EE呢?主要原因有以下几个: 1.Java本身的跨平台能力,可移植性强2.J2E ...
- s=a+aa+aaa+aaaa+aa...aaaa
main(){ int a,n,count=1; long int sn=0,tn=0; cout<<"input a and n:"; cin>>a> ...
- 信息处理,分而治之-- ESFramework 使用技巧
ESFramework开发手册系列文章已经详细介绍了如何使用ESPlus提供的ESPlus.Application.CustomizeInfo空间来发送和处理自定义信息,而且,在我们在前面介绍的de ...
- MvcPager
站点网址:http://www.webdiyer.com/mvcpager/ 控制台命令:Install-Package Webdiyer.MvcPager
- [译] Block 小测验
本文来源于 ParseBlog 的其中一篇博文 <Objective-C Blocks Quiz> 如果您觉得我的博客对您有帮助,请通过关注我的新浪微博 MicroCai 支持我,谢谢! ...
- 动态封杀与解封IP
不论IIS6还是IIS7 都可以把需要封杀的IP加入封杀列表.但是需要注意的是我们代码写的是全部替换原先的数据.但是在IIS7下,执行的效果是原先的不替换,新加一批封杀 IP.当然IIS7下,如果新加 ...
- SharePoint 2013 字段属性之JSLink 转载来源(http://www.cnblogs.com/jianyus/p/3544482.html)
在SharePoint 2013中,SPField新增加了一个属性是JSLink,使用客户端脚本修改字段前台展示,我们可以用很多方法修改这个脚本的引用,然后来修改脚本,下面,我们举一个简单的例子. 具 ...
- Jenkins - 持续集成环境搭建【转】
1. Jenkins 概述 Jenkins是一个开源的持续集成工具.持续集成主要功能是进行自动化的构建.自动化构建包括自动编译.发布和测试,从而尽快地发现集成错误,让团队能够更快的开发内聚的软件. 2 ...
- 正则匹配 sql语句参数
List<string> listcommand = new List<string>(); string sql = "update BMDMB set bmdmb ...