高阶函数的本质也是函数,有两个特点
- 接受函数或者闭包作为参数
- 返回值是一个函数或者是闭包
这些函数我们通常用于Array,Set,Dictionary中的每一个元素
高阶函数我们大部分都用过,这里我就不介绍具体如何使用了,我只介绍源码是如何实现的
map函数
Map函数作用于Collection中的每一个元素,然后返回一个新的Collection。
假设我们有一个String类型的Array,现在我们对集合当中的每一个元素都是小写的。一般我们的代码会怎么写呢?我们看看通过高阶函数如何实现:
image.png
我们接下来看看底层是如何实现的
image.png可以看到,首先创建一个新的数组,(通过迭代器) 对集合中每一个元素执行transform闭包操作,然后返回新的集合。
flatMap函数
flatMap会将二维数组压平为一位数组
[[element],[element],[element]] -> [element]
image.png
相比较我们的 map 来说, flatMap 最主要的两个作用一个是 压平,一个是过滤空值。
compactMap函数
本质将集合的数据做了一个可选只绑定的操作,返回的结果是非可选值。
image.png
filter函数
filter就是Sequence中默认提供的方法,允许调用者传入一个闭包来过滤集合中的元素 image.pngforEach
对于集合类型的元素,有时候不必要每次都通过for循环来去做遍历,Sequence同样提供了高阶函数来公供我们使用
image.png
源码很简单,就是for in语法糖。
reduce
源码:
image.png
给定一个初值,将集合中的元素依次和初值进行transform操作,得到返回值再进行transform操作,不断的累加
看着可能不是很好理解,接下来我举个例子
我们可以使用 reduce 函数合并集合中所有元素创建一个新值。比如
image.png
网友评论