Pen*_*gin 33 scala scala-2.8 scala-collections
你如何使用Map.foldLeft?根据文档,它看起来像
foldLeft [B] (z: B)(op: (B, (A, B)) ? B) : B
Run Code Online (Sandbox Code Playgroud)
但我遇到了困难:
Run Code Online (Sandbox Code Playgroud)Map("first"->1,"second"->2).foldLeft(0)((a,(k,v)) => a+v )错误:不是合法的形式参数
错误指向k前面的空心括号.
Deb*_*ski 79
如果要使用(a, (k, v))语法,则需要建议编译器使用模式匹配.
Map("first"->1, "second"->2).foldLeft(0){ case (a, (k, v)) => a+v }
Run Code Online (Sandbox Code Playgroud)
请注意,case语句需要花括号.
Tho*_*ung 17
我想,你不能像你期望的那样对元组进行模式匹配:
Map("first"->1,"second"->2).foldLeft(0)((a, t) => a + t._2)
Run Code Online (Sandbox Code Playgroud)
实际上,使用值和总和更简单.
Map("first"->1,"second"->2).values.sum
Run Code Online (Sandbox Code Playgroud)
诀窍是使用部分函数作为代码块,换句话说,您添加一个case与参数匹配的语句:
Map("first" -> 1, "second" -> 2).foldLeft(0) { case (a, (k, v)) => a + v }
Run Code Online (Sandbox Code Playgroud)
这不是你问题的真正答案,但我发现它在开始折叠时很有用,所以无论如何我都会这么说!请注意,/:方法"别名" foldLeft可以更清楚,原因有两个:
xs.foldLeft(y) { (yy, x) => /* ... */ }
(y /: xs) { (yy, x) => /* ... */ }
Run Code Online (Sandbox Code Playgroud)
请注意,在第二行:
y被折叠到集合中xsTuple2参数的顺序与方法"call"的顺序相同| 归档时间: |
|
| 查看次数: |
23477 次 |
| 最近记录: |