数组的map 跟 flatMap 的用法

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(f: T -> V) -> Box,它會嘗試取出 Box 中的值,如果成功則進行操作,如果不成功則維持原樣再傳遞下去。

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

你可能感兴趣的:(数组的map 跟 flatMap 的用法)