Swift3.0 关于reduce函数,知道这些就够了

Swift3.0 关于reduce函数,知道这些就够了,第1张

概述reduce方法把数组元素组合计算为一个值。 我们使用上面例子计算数组元素的和,结果应该为107(10 + 20 + 45 + 32) 传统实现: 1 2 3 4 var sum = 0 for money in moneyArray {     sum = sum + money } 再看看数字相乘 1 2 3 4 var product = 1 for money in moneyArray 

reduce方法把数组元素组合计算为一个值。

我们使用上面例子计算数组元素的和,结果应该为107(10 + 20 + 45 + 32)

传统实现:

1 2 3 4 varsum=0 formoneyinmoneyArray{ sum=sum+money }

再看看数字相乘

product=1product=product*money这两个惟一不同的是计算的初始值(sum为0,product为1)和计算 *** 作符(sum为+,product为*)

Reduce便可用于快速完成这类 *** 作,通过指定一个初始值和一个组合元素的方法

Swift中reduct在Array类中的定义为

public func reduce<Result>(_ initialResult: Result,_ nextPartialResult: (Result,Element) throws -> Result) rethrows -> Result

接收两个参数,一个为类型Result的初始值,另一个为把类型为Result的元素和类型为Element的元素组合成一个类型为Result的值的函数

最终结果整个数组就变成了一个类型为Result的值。

在事例中Result和Element是Int,初始值是0,combine函数计算两个Int之和

和计算改写成:

sum=moneyArray.reduce(0,{另一点需要说明的是+})

Swift中 *** 作符可用着函数,可简化成:

reduce可能是高阶函数中最难理解的一个。 需要注意的是combine函数的两参数类型不同,$0为计算结果类型,$1为数组元素类型。

数据比较大的时候,高阶函数会比传统实现更快,因为它可以并行执行(如运行在多核上)。下面是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 {                return (item,result.1)            }else {                return (item,result.1+1)            }        }        return reduced.1    }        func countTheUnique() -> Int {        let sorted = self.sorted(by: <)        let initial: (Element?,0)        let result = sorted.reduce(initial,{(,.0 ==  ? .1 : .1+1)})        return result.1    }    //第二种可以一行代码完成    func countUnique() -> Int {        return self.sorted(by: <).reduce((.none,0),.0 ==  ? .1 : .1+1)}).1    }}print([10,2,3,4,5,1].countTheUnique()) // 6print([10,1].countUnique())    // 6print([10,1].countUniques())   // 6

总结

以上是内存溢出为你收集整理的Swift3.0 关于reduce函数,知道这些就够了全部内容,希望文章能够帮你解决Swift3.0 关于reduce函数,知道这些就够了所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1064673.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)