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