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)的呢?
我們來實(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)沒有,flatMap的作用說白了就是把數(shù)組融合之后再展開得到一個(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)我們知道,哦,原來map的transform函數(shù)返回的是一個(gè)元素,而flatMap返回的是一個(gè)數(shù)組,然后在for循環(huán)里,result.append是直接用的contentsof參數(shù),所以flatMap才擁有了融合再展開的屬性。
大伙現(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)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • map 簡(jiǎn)介 首先,咱們說說 map 函數(shù)如何使用 let numbers = [1,2,3,4] let res...
    指尖的跳動(dòng)閱讀 655評(píng)論 0 0
  • map 和 flatMap 函數(shù) map和flapMap 函數(shù)能夠很輕易地將數(shù)組轉(zhuǎn)換成另外一個(gè)新數(shù)組。 Map函數(shù)...
    codeTao閱讀 479評(píng)論 0 1
  • 一、數(shù)組中的 map 和 flatMap 數(shù)組中的 map 對(duì)數(shù)組元素進(jìn)行某種規(guī)則的轉(zhuǎn)換,例如: 二、 flatM...
    kmplayer閱讀 4,196評(píng)論 0 6
  • 作者:Thomas Hanning,原文鏈接,原文日期:2015-11-16譯者:pmst;校對(duì):千葉知風(fēng);定稿:...
    梁杰_numbbbbb閱讀 683評(píng)論 0 3
  • 畢業(yè)的第一站—常州 高考結(jié)束原先想到南京打暑假工,接著再上大學(xué)??涩F(xiàn)實(shí)是我高考落榜了,大專也不想去上,家里也不愿意...
    心寬如海閱讀 418評(píng)論 0 0

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