美文网首页iOS-swift
Swift高阶函数(map,filter和reduce)

Swift高阶函数(map,filter和reduce)

作者: HunterDude | 来源:发表于2017-01-23 17:10 被阅读82次
    //  SequenceTestVC.swift
    //  SwiftErrorHandlingAndGenerics
    //
    //  Created by Hunter on 23/01/2017.
    //  Copyright © 2017 Hunter. All rights reserved.
    //
    
    import UIKit
    
    class SequenceTestVC: UIViewController {
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            // MARK: - 闭包
    
            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: a) + square(a: b)) / 2.0
            }
            func averageSumOfCubes(a:Float,b:Float) -> Float {
                return (cube(a: a) + cube(a: b)) / 2.0
            }
    
            // 函数作为参数做法:
            @discardableResult
            func averageSumOfFunction(a: Float, b: Float,f:((Float) ->Float))-> Float {
                return (f(a) + f(b)) / 2
            }
    
            // 实现
            print(averageSumOfFunction(a: 4, b: 4, f: square))
            print(averageSumOfFunction(a: 4, b: 4, f: cube))
            print(averageSumOfFunction(a: 3, b: 3, f: {(x: Float) -> Float in return x * x}))
            // 忽略指定参数名,使用默认参数名$0(如果函数接收多个参数,使用$K作为第K-1个参数,如$0,$1,$2......)
            print(averageSumOfFunction(a: 3, b: 3, f: { $0 * $0 * $0}))
    
            print("-----------------------------------------------------------------")
    
    
            // MARK: - Array
            /*
             Swift的标准数组支持三个高阶函数:map,filter和reduce。Objective-C的NSArray没有实现这些方法
             */
    
            // MARK: map
            /*
             map: 即转换
             转换原数组元素并由此得到一个新数组
             */
            let moneyArr: [Int] = [1,22,33,100,1000,1000000000,100000000000000]
            print(moneyArr)
            let stringArr: [String] = moneyArr.map({"\($0)?"})
            print(stringArr)
            print(moneyArr.map({ (money) in "\(money)?" }))
    
            // MARK: Filter
            /*
             filter: 即赛选
             赛选数组中符合条件的元素
             */
    
            print(moneyArr.filter { (money) -> Bool in return 20 < money && money < 10000 })
            print(moneyArr.filter({20 < $0 && $0 < 10000}))
    
            // MARK: Reduce
            /*
             reduce: 把数组元素组合计算为一个值
             */
    
            /*
             reduce(initial: U, combine: (U, T) -> U) -> U
             接收两个参数,一个为类型U的初始值,另一个为把类型为U的元素和类型为T的元素组合成一个类型为U的值的函数。
             最终结果整个数组就变成了一个类型为U的值
             */
            print(moneyArr.reduce(0, {$0 + $1}))
            print(moneyArr.reduce(0, +))
    
            // 遍历
            let name = "uraimo"
            (1...4).forEach{print("Happy Birthday " + (($0 == 3) ? "dear \(name)":""))}
    
        }
    
    }
    

    相关文章

      网友评论

        本文标题:Swift高阶函数(map,filter和reduce)

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