函数式编程的常用方法
2016-2017年在吹AI之前,一堆人对着函数式编程一阵狂吹,导致各家语言都加入了函数式编程的基本支持,其中三个基本方法就是map/reduce/filter
名词 | 概念 | 原理 |
---|---|---|
lambda | 函数式编程的基本方法 | 其实就是一个回调方法的语法糖,代表着一个匿名方法 |
map | 数学中的映射概念 | 将一组数据集通过一个逻辑转换成另一个数据集,逻辑就是传入的lambda表达式,就是一个方法 |
reduce | 数学中的归约概念 | 将一组数据集通过一个逻辑转化成一个结果 |
filter | 过滤 | 将一个数据集中符合条件的筛选出来,很容易理解 |
Filter & Map
假设存在一个数组1-9,我们可以通过两个Lambda表达式进行筛选和映射,其实就是两个Block,入参是 number 返回值分别是Bool类型和Int类型
1 | let original = [1,2,3,4,5,6,7,8,9] |
Reduce
归约的思路稍微复杂一点,就是把数组1-9变为一个数,即数组中所有的元素都参与运算,reduce接收两个参数
- 函数运算的初试值
- 函数运算的逻辑(即lambda表达式)
1 | var sum: Int = original.reduce(100, { (temp, number) -> Int in |
其中lambda表达式有两个参数
- 上次运算的结果temp,由于第一次运算不存在上次运算结果,所以使用初始值
- 这次进入的元素number
所以sum就是 100+1+2+3+4+5+6+7+8+9