Swift:map 和 flatMap 基礎(chǔ)入門

作者:Thomas Hanning,原文鏈接,原文日期:2015-11-16
譯者:pmst;校對(duì):千葉知風(fēng);定稿:千葉知風(fēng)

借助于 map和flapMap 函數(shù)能夠很輕易地將數(shù)組轉(zhuǎn)換成另外一個(gè)新數(shù)組。

Map

map函數(shù)能夠被數(shù)組調(diào)用,它接受一個(gè)閉包作為參數(shù),作用于數(shù)組中的每個(gè)元素。閉包返回一個(gè)變換后的元素,接著將所有這些變換后的元素組成一個(gè)新的數(shù)組。

這聽(tīng)起來(lái)有些復(fù)雜,但它是相當(dāng)簡(jiǎn)單的。想象你擁有一個(gè)string類型的數(shù)組:

let testArray = ["test1","test1234","","test56"]

map函數(shù)的閉包接收一個(gè)字符串(類型為string)作為參數(shù),原因在于我們調(diào)用函數(shù)處理的數(shù)組元素類型為String。本例中,我們想要返回一個(gè)整型數(shù)組,逐個(gè)對(duì)應(yīng)字符串元素成員的字符長(zhǎng)度。因此閉包的返回類型為Int?.

let anotherArray = testArray.map { (string:String) -> Int? in
     
     let length = string.characters.count
     
     guard length > 0 else {
         return nil
     }
 
     return string.characters.count
}
 
print(anotherArray) //[Optional(5), Optional(8), nil, Optional(6)]

FlatMap

flatMap很像map函數(shù),但是它摒棄了那些值為nil的元素。

let anotherArray2 = testArray.flatMap { (string:String) -> Int? in
 
     let length = string.characters.count
 
     guard length > 0 else {
          return nil
     }
 
     return string.characters.count
}
 
print(anotherArray2) //[5, 8, 6]

另外一個(gè)與map函數(shù)不同之處在于:倘若元素值不為nil情況下,flapMap函數(shù)能夠?qū)⒖蛇x類型(optional)轉(zhuǎn)換為非可選類型(non-optionals)。

引用

Image:@ Fly_dragonfly / shutterstock.com

本文由 SwiftGG 翻譯組翻譯,已經(jīng)獲得作者翻譯授權(quán),最新文章請(qǐng)?jiān)L問(wèn) http://swift.gg。

最后編輯于
?著作權(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)容

  • 一、數(shù)組中的 map 和 flatMap 數(shù)組中的 map 對(duì)數(shù)組元素進(jìn)行某種規(guī)則的轉(zhuǎn)換,例如: 二、 flatM...
    kmplayer閱讀 4,196評(píng)論 0 6
  • map 和 flatMap 是 Swift 中兩個(gè)常用的函數(shù),它們體現(xiàn)了 Swift 中很多的特性。對(duì)于簡(jiǎn)單的使用...
    SwiftCafe閱讀 1,598評(píng)論 5 16
  • 粗鄙的簡(jiǎn)介 以下轉(zhuǎn)自CSDN的一篇博博客http://blog.csdn.net/fish_yan_/articl...
    小白猿閱讀 544評(píng)論 0 2
  • 86.復(fù)合 Cases 共享相同代碼塊的多個(gè)switch 分支 分支可以合并, 寫在分支后用逗號(hào)分開(kāi)。如果任何模式...
    無(wú)灃閱讀 1,543評(píng)論 1 5
  • 帶有文言文的小說(shuō)看起來(lái)有些難,買了這本感覺(jué)上當(dāng)了,巴掌大的書要我26塊,不爽。 現(xiàn)在的公眾號(hào)很多都在建...
    GlassesMonkey閱讀 199評(píng)論 0 0

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