Tino又想吃肉了

map,filter,reduce

Word count: 349Reading time: 1 min
2021/03/17

高阶函数:map, filter, reduce

reduce

  • Reduce有两个参数,一个是初始值,一个是有两个参数的闭包
  • 可以用在利用原有的数组求新值的情况
  • @inlinable public func reduce<Result>(_ initialResult: Result, _ nextPartialResult: (Result, Element) throws -> Result) rethrows -> Result
  • 由上面的代码可知,reduce的返回值是一个Result泛型,这正是第一个参数的类型。也就是说,reduce返回的值类型与第一个参数的类型相同。
  • 例子:将整形数组转化为字符串数组
    1
    2
    arr = [1,2,3,4,5]
    print(arr.reduce("", {"\($0)" + "\($1)"}) )

filter

  • 顾名思义,filter可以帮我们筛选数组中的元素
  • 例如筛选出数组中的偶数
    1
    2
    3
    4
    5
    arr = [1,2,3,4,5]
    print(arr.filter({
    $0 % 2 == 0
    }) )
    // 输出[2,4]

map

  • map函数接受一个闭包作为参数,闭包返回每一个变化后的元素,并组成一个新的数组
  • map返回的数组中的元素类型不需要与原类型相同。
    1
    2
    3
    4
    5
    arr = [1,2,3,4,5]
    print(arr.map({
    $0 * 10
    }))
    //输出[10,20,30,40,50]
  • 函数原型为@inlinable public func map<T>(_ transform: (Element) throws -> T) rethrows -> [T]

值得注意的是,不仅在如Array、Dictionary等集合中实现了这几个高阶函数,在String里同样实现了这几个函数。


Tino Wu

CATALOG
  1. 1. 值得注意的是,不仅在如Array、Dictionary等集合中实现了这几个高阶函数,在String里同样实现了这几个函数。