標籤:swift filter map reduce
map,filter,reduce
註:本文為作者自己總結,過於基礎的就不再贅述 ,都是親自測試的結果。如有錯誤或者遺漏的地方,歡迎指正,一起學習。
關於Swift 中String 、數組 、字典的基本用法這裡就不再贅述了,這些都很簡單 不會的 在用得時候baidu下就行了。這裡主要看下這幾個高階函數
map
map方法,其擷取一個閉包運算式作為其唯一參數。 數組中的每一個元素調用一次該閉包函數,並返回該元素所映射的值(也可以是不同類型的值)。 具體的映射方式和傳回值類型由閉包來指定。當提供給數組閉包函數後,map方法將返回一個新的數組,數組中包含了與原數組一一對應的映射後的值。來看看map的定義 `func map(transform: (T) -> U) -> U[]` ,這裡 `T` 和 `U` 都是泛型 ,指一種類型 , `T` 和 `U` 只兩個不同的類型 ,也可以相同 。來看個例子 :我們用一個Int類型數組儲存商品金額,想把每個金額前面添加一個字元“¥”
let prices = [10,20,30]let strPrices = prices.map { "¥\($0)" }
這個文法大家應該不陌生吧 ,陌生的去把上節閉包重新看一遍因為map只有一個參數,後面直接用了閉包的尾隨 ,不會加括弧了得到的結果 :`print(strPrices) //[¥10, ¥20, ¥30]` 這隻是一個簡單的執行個體 ,其實你可以對每個元素進行很複雜的運算,這裡不再贅述 ,用法如此,點到為止 、哈哈
filter
filter 顧名思義 就是用來過濾的 ,它使用來選擇數組中滿足條件的元素 定義:filter(includeElement: (T) -> Bool) -> T[] 接受一個數組元素 返回一個Bool類型
let p = [10,20,33,44,87,15]let res = p.filter{ $0>20 }
得到結果 :print(res) //[33, 44, 87]是不是用起來很方便呀!!
reduce
reduce方法把數組元素組合計算為一個值,並且會接受一個初始值,這個初始值得類型可能和數組元素類型不同。來看定義 。reduce(initial: U, combine: (U, T) -> U) -> U不同的大寫字母當成不同的類型看待。來看執行個體
let p1 = [20,20,10]let sum = p1.reduce(0) { $0+$1 }print(sum) //50
這個執行個體給了個初始為Int類型的 0 ,用這個 0 去加數組所有元素
let sum2 = p1.reduce(4) { $0+$1 }print(sum2) //54
初始值換成4 就會得到這樣的結果 ,是不是也不是那麼難理解呀!
let sum1 = p1.reduce("2") { " \($0) , \($1)" }print(sum1) // 2 , 20 , 20 , 10
如果初始值是一個字串就不能用加法了。不過可以拼接得到上面的結果 。map和filter都很好理解 ,reduce稍微難理解一點 需要說明的是資料比較大的時候,高階函數會比傳統實現更快,因為它可以並存執行(如運行在多核上),除非真的需要更高定製版本的map,reduce和filter,否則可以一直使用它們以獲得更快的執行速度希望以上的執行個體可以協助大家更好的理解這幾個函數!
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
Swift詳解之五-----------map,filter,reduce