ope*_*sas 15 collections loops scala
这是一个新手问题
我有以下代码:
var total = 0L
docs.foreach(total += _.length)
Run Code Online (Sandbox Code Playgroud)
在docs中我有一组带有.length属性的对象
我喜欢这样的东西:
val total = docs.[someScalaMethod](0, (element, acum) => acum + element.length )
Run Code Online (Sandbox Code Playgroud)
我的意思是,一个迭代每个元素传递累加器变量的方法......
我传递的第一个零应该是累加器var的初始值.
如何实现?
Rex*_*err 22
这称为折叠.这几乎就是你所说的:
docs.foldLeft(0)((accum, element) => accum + element.length)
Run Code Online (Sandbox Code Playgroud)
对于从左到右遍历集合的版本(通常更可取;从右到左是foldRight,而2.9有一个fold可以从任何地方开始,但在如何转换类型方面有限制).
一旦你习惯了这个,就会有一个简短的折叠版本,其中累加器在左边(想想它是从左到右穿过列表),并且你使用占位符作为变量名称,因为你每次只使用一次: (0 /: docs)(_ + _.length)
docs map { _.length } reduce { _ + _ }
Run Code Online (Sandbox Code Playgroud)
或者(thx去Luigi Plinge)
docs.map(_.length).sum
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7241 次 |
| 最近记录: |