美文网首页
468,swift 中Map和FlatMap的区别(面试点:1、

468,swift 中Map和FlatMap的区别(面试点:1、

作者: 枫叶1234 | 来源:发表于2021-02-05 06:49 被阅读0次

    比如说有一个数组
    var array = [1,2,3]
    如果有个需求是需要用这个数组生成一个新数组为每个元素自身想家的结果数组,那么一般的做法是会通过遍历来完成这个需求,示例如下:

    var array2:[Int] = []
    for item in array 
    {
        array.append(item)
    }
    

    这样生成的新数组即得到了我们需要的数据
    如果通过map这个高阶函数来实现的话那么就简单多了,示例如下:

    let array2 = array.map { (number: Int) -> Int in
        return number + number
    }
    或
    let array2 = array.map {
        return $0 + $0
    }
    

    1、flatMap的功能和map类似,区别在于flatMap可以去nil,还可以自动解包,示例如下

    let fruits = ["apple", "banana", "orange", ""]
    // 这里数组中存在一个""的字符串 为了后面来比较 map 和 flatMap
    let counts = fruits.map { fruit -> Int? in
        let length = fruit.characters.count
        guard length > 0 else {
            return nil
        }
        return length
    }
    // [Optional(5), Optional(6), Optional(6), nil]
    print(counts)
    
    let fruits = ["apple", "banana", "orange", ""]
    let counts = fruits.flatMap { fruit -> Int? in
        let length = fruit.characters.count
        guard length > 0 else {
            return nil
        }
        return length
    }
    // [5,6,6]
    print(counts)
    

    2. flatMap 还能把数组中存有数组的数组 一同打开变成一个新的数组

    let array = [[1,2,3], [4,5,6], [7,8,9]]
    // 如果用map来获取新的数组
    let arrayMap = array.map { $0 }
    // [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
    print(arrayMap)
    // 用flatMap
    let arrayFlatMap = array.flatMap { $0 }
    // [1, 2, 3, 4, 5, 6, 7, 8, 9]
    print(arrayFlatMap)
    

    相关文章

      网友评论

          本文标题:468,swift 中Map和FlatMap的区别(面试点:1、

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