高階函數本質上也是函數,有兩個特點: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問的比較多。