理解Swift中map 和 flatMap對集合的作用


map和flatMap是函數式編程中常見的概念,python等語言中都有。借助於 map和flapMap 函數能夠很輕易地將數組轉換成另外一個新數組。

map函數能夠被數組調用,它接受一個閉包作為參數,作用於數組中的每個元素。閉包返回一個變換后的元素,接着將所有這些變換后的元素組成一個新的數組。

簡單的說, map就是映射函數,把一個集合映射成另一個集合。


Swift的flatMap不容易理解,flatMap很像map函數,但是它摒棄了那些值為nil的元素。

flatMap是在處理一個容器而不是數組,這樣可以更好地理解它。


為了處理可選類型,flatMap被重載過。它會接受一個可選類型的數組並返回一個拆包過的且沒有nil值的可選類型組成的數組。

下面是flatMap的定義
extension SequenceType {    /// Return an `Array` containing concatenated results of mapping `transform`    /// over `self`.    func flatMap<S : SequenceType>(@noescape transform: (Self.Generator.Element) -> S) -> [S.Generator.Element]}extension SequenceType {    /// Return an `Array` containing the non-nil results of mapping `transform`    /// over `self`.    func flatMap<T>(@noescape transform: (Self.Generator.Element) -> T?) -> [T]}




參考下面的示例代碼:

let test1 = (1...7).map{ (i : Int) -> String?  in    return  i > 1 ? String("sss \(i)") : nil}print(test1)let test2 = (1...7).flatMap{ (i : Int) -> String?  in    return  i > 1 ? String("sss \(i)") : nil}print(test2)


執行結果

[nil, Optional("sss 2"), Optional("sss 3"), Optional("sss 4"), Optional("sss 5"), Optional("sss 6"), Optional("sss 7")]
["sss 2", "sss 3", "sss 4", "sss 5", "sss 6", "sss 7"]


參考文章


http://swift.gg/2015/08/06/swift-2-flatmap/

https://segmentfault.com/a/1190000004050907


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com