zoukankan      html  css  js  c++  java
  • Swift高阶函数介绍(闭包、Map、Filter、Reduce)

    Swift语言有非常多函数式编程的特性。常见的map,reduce,filter都有,初看和python几乎相同,以下简介下


    闭包介绍:

    闭包是自包括的功能代码块,能够在代码中使用或者用来作为參数传值。

    如果我们须要两个函数,当中一个计算两个数的平方的平均值,还有一个计算两个数的立方的平均值,传统的解决方法会是这样:

    代码
    func square(a:Float) -> Float { return a * a}func cube(a:Float) -> Float { return a * a * a}func averageSumOfSquares(a:Float,b:Float) -> Float { return (square(a) + square(b)) / 2.0}func averageSumOfCubes(a:Float,b:Float) -> Float { return (cube(a) + cube(b)) / 2.0}

    我们注意到averageSumOfSquares和averageSumOfCubes的唯一不同仅仅是分别调用平方函数或立方函数。

    如果我能够定义一个通用函数。这个函数以两个数和一个使用这两个数的函数作为參数,来计算平均值而不是反复调用将会非常好,我们能够使用闭包作为函数參数

    代码
    func averageOfFunction(a:Float,b:Float,f:(Float -> Float)) -> Float { return (f(a) + f(b)) / 2}averageOfFunction(3, 4, square)averageOfFunction(3, 4, cube)

    在Swift中有非常多种定义闭包表达式的方法。这里从最啰嗦的開始展示到最简洁的为止:

    代码
    averageOfFunction(3, 4, {(x: Float) -> Float in return x * x})averageOfFunction(3, 4, {x in return x * x})averageOfFunction(3, 4, {x in x * x})averageOfFunction(3, 4, {$0 * $0})

    Map

    在Swift中Map是Array类的一个方法。我们能够使用它来对数组的每一个元素进行转换。
    方法:func map(transform: (T) -> U) -> U[]
    假如如今须要对一个Int数组进行字符串转换。那么就能够使用map方法:
    let intArray = [1,111,1111]//结果为["1","11","111"]let stringArray = intArray.map({ (intValue) -> String in return "(intValue)"})

    Filter

    filter用于选择数组元素中满足某种条件的元素。


    方法:filter(includeElement: (T) -> Bool) -> T[]
    还是接着上面Map的代码继续写:
    //结果[111,1111]let filterArray = intArray.filter { (intValue) -> Bool in return intValue > 30}

    Reduce

    reduce方法把数组元素组合计算为一个值。
    方法:reduce(initial: U, combine: (U, T) -> U) -> U
    代码接着上面写:
    //结果1223let sum = intArray.reduce(0,combine: +)let sum2 = intArray.reduce(0) { (int, int2) -> Int in return int+int2}



  • 相关阅读:
    day69test
    day70test
    day71test
    ymfx
    day71
    day69
    day70
    day70test
    day65——day69
    c语言解决函数变参数问题 va_list
  • 原文地址:https://www.cnblogs.com/wzjhoutai/p/7213835.html
Copyright © 2011-2022 走看看