scala – 减少和折叠之间的差异
发布时间:2020-12-16 09:03:25 所属栏目:安全 来源:网络整理
导读:阅读这篇关于 Scala http://josephmoniz.github.io/blog/2013/04/04/scala-reduce-vs-fold/中的reduce vs fold的文章,它指出“你正在获取N的一些值并对其执行聚合操作,使得最终结果通常是某个值 = N”. 但是这个陈述是错误的,因为对N个值进行求和会产生一个
阅读这篇关于
Scala
http://josephmoniz.github.io/blog/2013/04/04/scala-reduce-vs-fold/中的reduce vs fold的文章,它指出“你正在获取N的一些值并对其执行聚合操作,使得最终结果通常是某个值< = N”. 但是这个陈述是错误的,因为对N个值进行求和会产生一个值> = N? 更新:我认为< =在这种情况下意味着相同的类型或子类型
解决方法
我认为这是一个有缺陷的表征.最好像这样考虑折叠:
In: initial value way to combine stuff with initial value collection Out: combined stuff 减少是这样的: In: way to combine stuff collection Out: combined stuff 也就是说,区别在于你是否有一个初始值(它可能与你在集合中的类型不同!),折叠,或者你是否只是折叠你已经拥有的值,如减少. 如果你有一个自然的零,即可以在不改变它结合的情况下组合的东西,那么你可以实现reduce作为从零开始的折叠.例如,对于乘法,零是1(因为1 * x == x),所以 List(1,2,3).fold(1){_ * _} List(1,3).reduce{_ * _} 给出相同的答案. (但是,只有第一个在空列表中给出答案!) 要看一个折叠如何更加通用的例子,请考虑这个 – 这里有一个foldLeft,所以我们知道在操作的左侧传递初始值 – List(1,3).foldLeft(List(0))((ns,n) => ns ++ List.fill(n+1)(n)) 给出List(0,1,3,3). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |