美文网首页
Swift中Array高阶函数的使用

Swift中Array高阶函数的使用

作者: LazyLoad | 来源:发表于2020-09-28 11:11 被阅读0次

    前言

    在Swift中,有关于Array的高阶函数。这一点和JavaScript是一样的。也就是说,Swift也是支持函数式编程的。

    关于Array有以下几个高阶函数:filter map reduce flatMap compactMap。其中前三个和JavaScript语言是一样的,不同的是语法不同而已。下面我们就来探索一下这5个高阶函数。掌握了这些高阶函数,可以让我们对于一些关于数组处理更加得心应手。

    实践

    • filter函数:过滤,将数组中的元素按照一定的条件进行过滤 返回过滤后新数组
      • 传入函数/闭包表达式
      • 该函数/闭包表达式会执行n次,n代表数组中元素个数
      • 该函数/闭包表达式 必须返回Bool类型
      • 该函数/闭包表达式 接收一个参数,该参数就是每次遍历的数组中元素
      • 如果函数/闭包表达式返回值是true 就把该元素放入新的数组
      • 如果函数/闭包表达式返回值是false 该元素就会被过滤掉
    let array = [1, 2, 3, 4]
    let newArray = array.filter { (n) -> Bool in
        return n % 2 == 0
    }
    print(newArray) // [2, 4]
    
    // 利用Swift语言的语法糖 上面的代码还可以进行进一步的简化
    let newArray = array.filter { $0 % 2 == 0 }
    print(newArray) // [2, 4]
    
    • map函数:将数组中元素进行映射处理,返回处理过后的新数组
      • 传入函数/闭包表达式
      • 该函数/闭包表达式会执行n次,n代表数组中元素个数
      • 该函数/闭包表达式接收一个参数,该参数就是每次遍历的数组元素
      • 该函数/闭包表达式返回处理后的内容,将处理后的内容添加到新的数组中(映射操作)
    let array = [1, 2, 3, 4]
    let newArray = array.map { n in
        return n * 2
    }
    print(newArray) // [2, 4, 6, 8]
    
    // 简写
    let newArray = array.map { $0 * 2 }
    print(newArray) // [2, 4, 6, 8]
    
    • reduce函数:应用场景:汇总或者数组中每个元素的值和前一个值有关联的处理
      • 传入初始值和一个函数/闭包表达式
      • 该函数/闭包表达式会执行n次,n代表数组中元素个数
      • 该函数/闭包表达式接收2个参数,上一次遍历汇总的结果,和数组中的元素
      • 将汇总的结果作为返回值返回
    let array = [1, 2, 3, 4]
    let result = array.reduce(0) { (previousResult, n) in
        return previousResult + n
    }
    print(result) // 10
    
    // 简写
    let result = array.reduce(0) { $0 + $1 }
    print(result) // 10
    
    • flatMap:和map对比着来理解
      • flatMap传入的函数/闭包表达式 必须返回sequence类型
      • 最终的返回值将sequence中的元素放入到新的数组中
      • 而map传入的函数/闭包表达式 直接将数组作为元素放入到新的数组中
    let array = [1, 2, 3, 4]
    let newArray = array.map { n in
        return Array(repeating: n, count: n)
    }
    print(newArray) // [[1], [2, 2], [3, 3, 3], [4, 4, 4, 4]]
    
    let newArray2 = array.flatMap { n in
        return Array(repeating: n, count: n)
    }
    print(newArray2) // [1, 2, 2, 3, 3, 3, 4, 4, 4, 4]
    
    // 简写
    let newArray = array.flatMap { Array(repeating: $0, count: $0) }
    print(newArray) // [1, 2, 2, 3, 3, 3, 4, 4, 4, 4]
    
    • compactMap:和map对比着理解
      • compactMap在进行元素映射的时候,会将nil过滤掉,并且会将可选项进行解包
    let array = ["1", "flutter", "3", "Vue"]
    
    let newArray = array.map { item in
        return Int(item)
    }
    print(newArray) // [Optional(1), nil, Optional(3), nil]
    
    let newArray2 = array.compactMap { item  in
        return Int(item)
    }
    
    print(newArray2) // [1, 3]
    
    // 简写
    let newArray = array.compactMap { Int($0) }
    print(newArray) // [1, 3]
    

    相关文章

      网友评论

          本文标题:Swift中Array高阶函数的使用

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