swift Array类中 reduce 函数的用法

swift 中Array 定义的reduce函数

public func reduce<Result>(_ initialResult: Result, _ nextPartialResult: (Result, Element) throws -> Result) rethrows -> Result
接收两个参数,一个类型为Result的初始值,另一个为把类型为Result的元素和类型为Element 的元素组合成一个类型为Result的值的函数,最后返回一个Result类型的值。

高阶函数 reduce 比较难理解,但是高阶函数会比传统的遍历操作要快很多,高阶函数可以并行执行在多核上
下面扩展了Array 两个 方法,计算数组中不同数的个数,都是通过reduce来实现,实际上两个方式都是一样的,只是表达方式不一样,特别是第二种方法,很难懂
extension Array where Element: Comparable {
func countUniques() -> Int {
let sorted = self.sorted(by: <)
let initial: (Element?, Int) = (.none, 0)
let reduced = sorted.reduce(initial, {(result, item) -> (Element?, Int) in
if result.0 == item{
// print ("1-------- item = \(item) result.1 = \(result.1) ")
return (item, result.1)
}else{
// print ("2-------- item = \(item) result.1 = \(result.1) ")
return (item, result.1 + 1)
}
})
return reduced.1
}
// $0 代表 (Element?, Int)类型的参数 ,$1代表 Array里面的每一个元素
func countUnique() -> Int {
let sorted = self.sorted(by: <)
let initial: (Element?, Int) = (.none, 0)
let result = sorted.reduce(initial, {($1, $0.0 == $1 ? $0.1 : $0.1+1)})
return result.1
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值