高阶函数:map, filter, reduce
reduce
- Reduce有两个参数,一个是初始值,一个是有两个参数的闭包
- 可以用在利用原有的数组求新值的情况
@inlinable public func reduce<Result>(_ initialResult: Result, _ nextPartialResult: (Result, Element) throws -> Result) rethrows -> Result
- 由上面的代码可知,
reduce
的返回值是一个Result
泛型,这正是第一个参数的类型。也就是说,reduce
返回的值类型与第一个参数的类型相同。 - 例子:将整形数组转化为字符串数组
1
2arr = [1,2,3,4,5]
print(arr.reduce("", {"\($0)" + "\($1)"}) )
filter
- 顾名思义,
filter
可以帮我们筛选数组中的元素 - 例如筛选出数组中的偶数
1
2
3
4
5arr = [1,2,3,4,5]
print(arr.filter({
$0 % 2 == 0
}) )
// 输出[2,4]
map
- map函数接受一个闭包作为参数,闭包返回每一个变化后的元素,并组成一个新的数组
- map返回的数组中的元素类型不需要与原类型相同。
1
2
3
4
5arr = [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