Scala算子读码释义(持续更新ing)

1. foldLeft

查看源码:

  def foldLeft[B](z: B)(op: (B, A) => B): B = {
    var result = z
    this.seq foreach (x => result = op(result, x))
    result
  }

此处解析:
入参为两个 (z: B) 和 op: (B, A) => B 即: 一个任意类型的 z 和 一个匿名函数 op
再看将 z赋值给 result 并传进了 op的匿名函数 中原本的 B ,由此可以理解为 匿名函数op中的入参 B 的初始值就是Z , 又由this.seq知道 对调用者 进行foreach,使用变量x ,而x的值得,又赋给了 op函数中原本 的 A ,由此可知 A 就是调用者 比如

list.foldLeft()(){}    

那么 list 就是 入参的 op: (B, A) 中的 A 并由返回值为result做出总结:

定义2个入参 一个为 初始化参数 z ,和一个 函数 op,函数的入参是 初始化参数 z和 调用者本身
,使得 初始化参数z在函数 op的循环迭代下 得到累加值

代码举例:

object FoldLeft {

  def main(args: Array[String]): Unit = {

    /**
     * 示例一, 将map中的数据添加到另一个map中,注意需要一个可变的Map 
     *   或者导包: import scala.collection.mutable.Map
     */
    val map1 = scala.collection.mutable.Map[String,String]("1" -> "LSIA", "2" -> "LINDA")
    val map2 = Map("3" -> "lisa", "5" -> "puo")

    var map = map2.foldLeft(map1)((a, b) => {
      //a是聚合值,b.map2中一个对象
      val key: String = b._1
      val count: String = b._2
      //合并数据
      a += key -> count
    }).foreach(x=>println(x))


    /**
     * 示例二,  计算数字和
     */

    val i= 0 until(10)  //Range(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
    println(i)

    val a=0

   val sum= i.foldLeft(a)((x,y)=>{
     x+y
    })
    println(sum)  // 45

  }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值