如何将折叠左侧运算符“:/”转换为scala中的foldLeft函数?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将折叠左侧运算符“:/”转换为scala中的foldLeft函数?相关的知识,希望对你有一定的参考价值。

以下代码将两个映射的值合并为一个映射。

val merged = (map1 /: map2) { case (map, (k,v)) =>
    map + ( k -> (v + map.getOrElse(k, 0)) )
}

但是我使用foldLeft()()函数转换它是不成功的。这是我尝试过的,但无法有意义地进步。

val merged2 =  map2 foldLeft (map1) ((acc:Map[Int,Int], (k:Int,v:Int)) =>   acc + ( k -> (v + acc.getOrElse(k, 0)) ))

什么是使用foldLeft函数重写的正确方法?

答案

你几乎拥有它:

val merged2 = map2.foldLeft(map1) { case (acc, (k,v)) =>  acc + (k -> (v + acc.getOrElse(k, 0))) }

以上是关于如何将折叠左侧运算符“:/”转换为scala中的foldLeft函数?的主要内容,如果未能解决你的问题,请参考以下文章

scala 数据结构:折叠扫描拉链(合并)迭代器

在Scala中将字符串转换为运算符

如何折叠Scala迭代器并获得延迟计算的序列作为结果?

如何将 seq[row] 转换为 scala 中的数据框

如何将 RDD [GenericRecord] 转换为 scala 中的数据框?

如何使用scala将特定函数转换为apache spark中的udf函数? [复制]