繁体   English   中英

Scala foldLeft在地图上

[英]Scala foldLeft on Maps

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

foldLeft [B] (z: B)(op: (B, (A, B)) ⇒ B) : B

但是我有困难:

 Map("first"->1,"second"->2).foldLeft(0)((a,(k,v)) => a+v ) 

错误:不是合法的形式参数

错误指向k前面的空心括号。

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

Map("first"->1, "second"->2).foldLeft(0){ case (a, (k, v)) => a+v }

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

我认为,您无法按预期对元组进行模式匹配:

Map("first"->1,"second"->2).foldLeft(0)((a, t) => a + t._2)

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

Map("first"->1,"second"->2).values.sum

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

Map("first" -> 1, "second" -> 2).foldLeft(0) { case (a, (k, v)) => a + v }

这并不是您问题的真正答案,但我发现从折叠开始时它很有用,所以我还是会说! 请注意,出于两个原因,可以更清楚地使用foldLeft/:方法“ alias”:

xs.foldLeft(y) { (yy, x) => /* ... */ }

(y /: xs) { (yy, x) => /* ... */ }

请注意,在第二行中:

  • 更清楚的是,值y折叠到集合xs
  • 您可以轻松记住Tuple2参数的顺序与方法“ call”的顺序相同

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM