首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >地图上的Scala foldLeft

地图上的Scala foldLeft
EN

Stack Overflow用户
提问于 2010-11-14 17:34:53
回答 4查看 31.8K关注 0票数 40

您如何使用Map.foldLeft?根据文档,它看起来就像

代码语言:javascript
复制
foldLeft [B] (z: B)(op: (B, (A, B)) ⇒ B) : B

但我遇到了困难:

地图(“第一”->1,“第二”->2).foldLeft(0)((a,(k,v)) => a+v ) 错误:不是合法的形式参数

错误指向k前面的开括号。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-11-14 18:10:51

如果要使用(a, (k, v))语法,则需要建议编译器使用模式匹配。

代码语言:javascript
复制
Map("first"->1, "second"->2).foldLeft(0){ case (a, (k, v)) => a+v }

注意,case语句需要大括号。

票数 93
EN

Stack Overflow用户

发布于 2010-11-14 17:47:03

我认为,您不能像预期的那样在元组上进行模式匹配:

代码语言:javascript
复制
Map("first"->1,"second"->2).foldLeft(0)((a, t) => a + t._2)

实际上,使用值和和更简单。

代码语言:javascript
复制
Map("first"->1,"second"->2).values.sum
票数 19
EN

Stack Overflow用户

发布于 2010-11-14 20:52:47

诀窍是使用一个部分函数作为代码块,换句话说,您可以添加一个与参数匹配的case语句:

代码语言:javascript
复制
Map("first" -> 1, "second" -> 2).foldLeft(0) { case (a, (k, v)) => a + v }
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4178706

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档