此次主要講解swift中map、flatmap、filter、reduce對數組的操做,你會發現,你的數組變得很是簡單,上代碼:swift
被一個數組調用,而且能夠接受一個閉包,返回原數組各元素通過閉包處理之後所獲得的元素組成的數組數組
// 原來的數組 let textArr = ["魔獸", "驚天魔盜團2", "X戰警:天啓"] // 一個閉包 func addHD(movieName:String) ->String { let newName = movieName + "_HD" return newName } // 新數組 let newArr = textArr.map(addHD) print(newArr)//["魔獸_HD", "驚天魔盜團2_HD", "X戰警:天啓_HD"] // 或者能夠直接寫爲: let newArr2 = textArr.map {(movieName:String)->String? in let newName = movieName + "_HD" return newName } // 固然,還有最簡單的方法 let newArr3 = textArr.map{("\($0)_HD")}
flatmap和map的功能同樣,可是flatmap會自動剔除返回元素中爲nil的元素,而且返回的再也不是可選值,而是強制解析之後的非可選值。因此在flatmap和map的使用中咱們須要作一個選擇。閉包
顧名思義,filter就是過濾的意思,能夠將數組中的全部元素遍歷進行過濾函數
let num = [1, 2, 3, 4, 5, 6, 7, 8] let result = num.filter{$0 < 5} print(result) // [1, 2, 3, 4]
Reduce 是 map、flatMap 或 filter 的一種擴展的形式(譯者注:後三個函數能幹嗎,reduce 就能用另一種方式實現)Reduce 的基礎思想是將一個序列轉換爲一個不一樣類型的數據,期間經過一個累加器(Accumulator)來持續記錄遞增狀態。code
// 一個很是經典的代碼,一行實現0-100的和 (0...100).reduce(0, combine: +) // 5050
上邊的代碼首先是一個(0...100)的數組進行了reduce操做. (0, combine: +)中,0 表示一個初始值,」combine: +「表示對數組中的元素作+運算,獲得的結果賦值給0位置的這個參數基礎