Swift Map和FlatMap

map

Swift中的高階函數(shù)中Map的用途非常廣泛,對(duì)數(shù)組的操作也很方便
舉個(gè)簡(jiǎn)單的例子:

let numbers = [1, 2, 3, 4]
print(numbers.map { $0 * 2 })
###:[2, 4, 6, 8]

對(duì)numbers中的每個(gè)元素進(jìn)行乘以2的操作將會(huì)得到一個(gè)新的數(shù)組注意是的數(shù)組
那么Map內(nèi)部具體是怎么實(shí)現(xiàn)的呢?
我們來(lái)實(shí)現(xiàn)以下(和源碼不太一樣,效果一樣),我擴(kuò)展了Array

func hc_map<T>(_ transform: (Element) -> T) -> [T] {
     var result: [T] = []
     // 存儲(chǔ)最佳數(shù)組元素?cái)?shù)量(在你數(shù)組元素已知的情況下)
     result.reserveCapacity(count)
     for x in self {
         result.append(transform(x))
     }
     return result
}
print([1, 2 ,3 ,4].hc_map { $0 * 3 })
###: [3, 6, 9, 12]

以上就是map的使用和可能的內(nèi)部實(shí)現(xiàn)

下面我們看FlatMap

flatMap

首先我們先看flatMap的用法:

print([[1], [2, 3], [4]].flatMap { $0 })
###: [1, 2, 3, 4]

不知道大家發(fā)現(xiàn)沒(méi)有,flatMap的作用說(shuō)白了就是把數(shù)組融合之后再展開(kāi)得到一個(gè)新的數(shù)組。我們也看一下flatMap的內(nèi)部實(shí)現(xiàn):

extension Array {
    func hc_flatMap<T>(_ transform: (Element) -> [T]) -> [T] {
        var result: [T] = []
        for x in self {
            result.append(contentsOf: transform(x))
        }
        return result
    }
}
print([["a"], ["b", "c"], ["d"]].hc_flatMap { $0 })
###: ["a", "b", "c", "d"]

看實(shí)現(xiàn)我們知道,哦,原來(lái)map的transform函數(shù)返回的是一個(gè)元素,而flatMap返回的是一個(gè)數(shù)組,然后在for循環(huán)里,result.append是直接用的contentsof參數(shù),所以flatMap才擁有了融合再展開(kāi)的屬性。
大伙現(xiàn)在明白了嗎?簡(jiǎn)單的用法已到此,歡迎大神指正。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容