美文网首页2019最新iOS面试(OC+swift)
Swift 中map、flatMap、compactMap、fi

Swift 中map、flatMap、compactMap、fi

作者: 有趣程序猿 | 来源:发表于2018-10-08 11:28 被阅读86次

    .map  可以对数组中的每一个元素做一次处理(相当于for 循环出数组中所有元素,进行逐个处理后返回一个新数组)

    //下面将 Int 类型数组,转换成 String 类型的数组

    let value = [2,3,4,5,9]

    let strs = value.map({"$\($0)"})

    print(strs)                                //["$2", "$3", "$4", "$5", "$9"]

    //平方操作

    let squares =value.map({ $0 * $0 })

    print(squares)                       //[4, 9, 16, 25, 81]

    //计算每个字符串的长度

    let strArray = ["Apple", "Orange", "Grape", "sdfjejv", ""]

    let strLenth =strArray.map({$0.count})

    print(strLenth)             //[5, 6, 5, 7, 0]

    .flatMap 能把数组中存有数组的数组(二维数组、N维数组)一同打开变成一个新的数组。.Map不能

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

    let arr11 =array1.map{ $0 }

    let arr22 = array1.flatMap{ $0 }

    print(arr11)                 // [[1, 2, 3], [7, 8, 9], [4, 5, 6]]

    print(arr22)                // [1, 2, 3, 7, 8, 9, 4, 5, 6]

    //例1:下面比较 map 和 flatMap 这两个方法

    let array = ["Apple", "Orange", "Grape", ""]

    let arr1 =array.map{ a ->Int?in

        let  length = a.count

        guard  length >0 else{return  nil}

        return  length

    }

    print(arr1)               //[Optional(5), Optional(6), Optional(5), nil]

    //flatMap 方法同 map 方法比较类似,只不过它返回后的数组中不存在 nil(自动把 nil 给剔除掉),同时它会把 Optional 解包

    let arr2 = array.flatMap { a-> Int? in

        letlength = a.count

        guard length >0 else{returnnil}

        returnlength

    }

    print(arr2)              // [5, 6, 5]

    当后面的闭包中返回Optional的时候,在Swift 4.1中应该使用compactMap代替flatMap。

    let arr3 = array.compactMap { a-> Int? in

        let length = a.count

        guard length >0 else{returnnil}

        return length

    }

    print(arr3)      // [5, 6, 5]

    .filter方法用于过滤元素,即筛选出数组元素中满足某种条件的元素。

    let price = [20,30,40,15,19]

    //例1:筛选出金额大于 25 的元素。

    letresult =price.filter({ $0 >25})

    print(result)           //[30, 40]

    .reduce 方法把数组元素组合计算为一个值,并且会接受一个初始值,这个初始值的类型可以和数组元素类型不同

    将数组中的金额相加,计算总和。

    let price = [20,30,40,15,19]

    letsum =price.reduce(0) { $0 + $1 }

    print(sum)         //124

    将数组转成字符串,每个元素用顿号(、)隔开。

    let array = ["Apple", "Orange", "Grape", ""]

    let str = array.reduce("", {

        return$0 ==""? $1 : $0 +"、"+ $1

    })

    print(str)   AppleOrangeGrape

     .joined方法也可以做到

    let str1 =array.joined(separator:"、")

    print(str1)    AppleOrangeGrape

    二、高阶函数的组合使用、链式调用

    1.flatMap 配合 filter 将多维整型数组里面的能被3整除的筛选出来并且组合成了一个一维数组。

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

    let onlyEven = collections.flatMap {

        $0.filter{ $0 %3==0}

    }

    print(onlyEven)     [6, 9, 3]

    2.map 配合 reduce 计算二维数组里每个分组的总和。

    let sums = collections.map({ $0.reduce(0, +) })

    print(sums)      [20, 12, 13]

    3.将数组中大于 7 的所有数字进行求和操作。

    let marks = [4,5,8,2,9,7]

    let totalPass =marks.filter{$0 >7}.reduce(0,+)

    print(totalPass)      17

    4.对某一个数组里面的数字进行平方操作然后再筛选出偶数值。

    let numbers = [4,5,8,2,9,7]

    let evenSquares =numbers.map{$0 * $0}.filter{$0 %2==0}

    print(evenSquares)    [16, 64, 4]

    5.移除数组最后一个元素。

    varoriginalArr = [2,1,3]

    originalArr.removeLast()

    print(originalArr)     [2, 1]

    相关文章

      网友评论

        本文标题:Swift 中map、flatMap、compactMap、fi

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