IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    Swift集合类型高阶函数(二)

    Durban发表于 2020-11-10 10:33:06
    love 0

    flatMap/compactMap (swift 5.3)的使用

    - 不返回nil

    flatMap/compactMap处理返回后的数组不存在nil,同时它会把Optional解包

    看下map和flatMap/compactMap实现方式如下

    let colors = ["red", "yellow", "green", ""]
    let colorsOfMap = colors.map { item -> Int? in
        let length = item.count
        guard length > 0 else {
            return nil
        }
        
        return length
    }
    
    print(colorsOfMap)

    结果是

    [Optional(3), Optional(6), Optional(5), nil]

    flatMap/compactMap实现方式如下

    - flatMap

    let colorsOfFlatMap = colors.flatMap { item ->Int? in
        let length = item.count
        guard length > 0 else {
            return nil
        }
    
        return length
    }
    
    print(colorsOfFlatMap)

    - compactMap

    let colorsOfFlatMap = colors.compactMap { item ->Int? in
        let length = item.count
        guard length > 0 else {
            return nil
        }
        
        return length
    }
    
    print(colorsOfFlatMap)

    这里之所以用compactMap,是因为'flatMap' is deprecated Please use compactMap(_:)

    结果是

    [3, 6, 5]

    - 打开数组

    compactMap能把(二维、N维)数组一同打开变成一个新的数组

    let array = [[1,2,3],[4,5,6],[7,8,9]]
    
    // 对比
    let arr1 = array.map { $0 }
    print(arr1)
    
    let arr2 = array.flatMap { $0 }
    print(arr2)

    结果分别是

    [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
    
    [1, 2, 3, 4, 5, 6, 7, 8, 9]

    - 合并数组

    compactMap能把不同的数组合并为一个数组,合并后的数组的个数是要合并两个数组个数的乘积

    let animals = ["cat", "dog", "pig"]
    let counts = [1,2,3]
    
    let newArray = counts.flatMap { count in
        animals.map({ animal in
            return animal + "\(count)"
        })
    }
    
    print(newArray)

    结果是

    ["cat1", "dog1", "pig1", "cat2", "dog2", "pig2", "cat3", "dog3", "pig3"]
    

     



沪ICP备19023445号-2号
友情链接