swift中高阶函数之filter、map、flatMap、reduce

filter、map、flatMap、reduce都是swift中的高阶函数,对集合的处理代码更简洁,效率更高效

filter

对集合中的元素按照某个条件进行过滤,并返回一个新集合
如下代码所示,用于筛选数组中大于5的元素

let array = [1, 3, 5, 6, 9]
let filterArray = array.filter {
    $0 > 5
}
print("filterArray:\(filterArray)")

打印结果:

filterArray:[6, 9]

map

对集合中的所有元素进行同样的操作,并返回一个新集合
如下代码所示,用于对数组所有的元素进行加1的操作

let mapArray = array.map {
    $0 + 1
}
print("mapArray:\(mapArray)")

打印结果:

mapArray:[2, 4, 6, 7, 10]

flatMap

可将集合中包含的所有集合取出,组合成一个新的集合,并返回
如下代码所示,对将二维数组中的所有元素拿出来,组合成一个新的一维数组

let TwoDimArray = [[1, 1], [2, 2], [3, 3]]
let flatMapArray = TwoDimArray.flatMap {
    $0
}
print("flatMapArray:\(flatMapArray)")

打印结果:

flatMapArray:[1, 1, 2, 2, 3, 3]

如果二维数组中有一个可选类型就无法转成一维数组,效果和compactMap(过滤掉nil,对可选类型进行解包)一样。

reduce

对集合中所有的元素进行操作,并返回一个新值
如下代码所示,将数组中的元素加在一起,返回所有元素之和

let reduceArray = array.reduce(0) { (result, num) in
    return result + num
}
print("reduceArray:\(reduceArray)")

打印结果:

reduceArray:24

高阶函数可以链式调用,比如求一个数组中偶数的平方和,如:

let chainArr = [4, 3, 5, 8, 6, 2, 4, 7]

let resultArr = chainArr.filter {
                            $0 % 2 == 0
                        }.map {
                            $0 * $0
                        }.reduce(0) {
                            $0 + $1
                        }
// 136

你可能感兴趣的:(swift中高阶函数之filter、map、flatMap、reduce)