美文网首页
数组的map 跟 flatMap 的用法

数组的map 跟 flatMap 的用法

作者: 雨燕oc | 来源:发表于2017-03-21 16:20 被阅读0次

flatMap跟map都是讲一个数组转变成另一个你需要的数组

let array = ["","22","333"]

map函数能够被数组调用,它接受一个闭包作为参数,作用于数组中的每个元素,闭包返回一个变换后的元素,接着将所有这些变换后的元素组成一个新的数组。

 let anotherArr = array.map { (string:String) -> Int? in
          
            let  length = string.characters.count
            guard  length > 0 else{
                return nil
            }
            return string.characters.count
        }
    
    print(anotherArr)
//输出
[nil, Optional(2), Optional(3)]

flatMap
flatMap很像map函数,但是它摒弃了那些值为nil的元素。
另外一个与map函数不同之处在于:倘若元素值不为nil情况下,flapMap能够将可选类型(optional)转换为非可选类型(non-optionals)

 let Arr3 = array.flatMap { (string:String) -> Int? in
            
            let  length = string.characters.count
            guard  length > 0 else{
                return nil
            }
            return string.characters.count
        }

    print(Arr3)
//输出
[2, 3]

map 跟 flatMap的区别
map 函數定義大致為 func map<T>(f: T -> V) -> Box<V>,它會嘗試取出 Box 中的值,如果成功則進行操作,如果不成功則維持原樣再傳遞下去。

flatMap 函數定義大致為 func flatMap<T>(f: T -> Box<V>) -> Box<V>,他可以避免比如 map 中傳入的是一個 Optional<T> 後返回了一個 Optional<Optional<T>> 的糾結情況,簡單來說就是攤平結果,使之更好處理。Array 的 flatMap 還有另外一種用法:如果 Array 中的 Element 也是一個 Array<V>,則可以將其攤平為 Array<V>。

相关文章

网友评论

      本文标题:数组的map 跟 flatMap 的用法

      本文链接:https://www.haomeiwen.com/subject/fgsgnttx.html