高阶函数本质上也是函数,有两个特点:1.接受函数或者是闭包作为参数。2.返回值是一个函数或者是闭包。
这些函数我们常常用来做用于 Array,Set,Dictionary中的每一个元素。
map、flatMap、reduce、CompactMap、filter、
map 高阶函数
let arr = [[1,2,3],[4,5,6]]
let result = arr.map{$0}
可以找到苹果的源码,找到 map 函数的源码,
对每一个元素执行 闭包表达式操作,定义了一个 result 的 数组类型变量。result然后拼接,然后返回当前元素。
reduce 高阶函数
let numbers = [1,2,3]
let result = numbers.reduce(10, +)
print(result)
打印结果:16.
reduce 数组里所有的元素都跟 基础值10 做 + 操作。
源码分析,
对集合里每个元素,执行操作,然后返回给累加器。
reduce 灵活应用。面试题例子: 找数组中最大值,用 reduce去查找
let result = [1,2,3,4,5,6].reduce(0) {
return $0 < $1 ? $1 : $0
}
// 逆序数组
let result = [1,2,3,4,5,6].reduce([Int]()) {
return [$1] + $0
}
print(result)
打印 [6,5,4,3,2,1]
面试官在考察高阶函数一般会出一个题让用高阶函数去解答。reduce问的比较多。