您当前的位置: 首页 >  scala

宝哥大数据

暂无认证

  • 5浏览

    0关注

    1029博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Scala的foldLeft和foldRight

宝哥大数据 发布时间:2018-05-19 09:22:05 ,浏览量:5

首先看一个例子, 发现 /:不知道是什么 这里写图片描述

点进去发现, /:实际是foldLeft操作

  def /:[B](z: B)(op: (B, A) => B): B = foldLeft(z)(op)

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

方法接收两个参数, z和op, 一个是B类型的参数z, 另一个是返回B类型的**函数**op 在看到这个trait其实是TraversableOnce,可迭代的集合。 def seq: TraversableOnce[A] 比如一个val listA = List(1,2,3) listA其实是实现了TraversableOnce这个trait的。 我们可以直接使用:

object TestFoldLeft {
    def main(args: Array[String]): Unit = {
      val listA = List(1, 2, 3)
      val b = (10/:listA)(_+_)
      val c = listA.foldLeft(10)(_+_)
      println(b)
    } 
}

这个里面的10其实就是z返回值是Int类型即B类型 那么可以看出op这个函数返回值也需要是Int类型

可以看出

val result = z, 这里其实就是10,x=>result=op(result, x) ,

其实z就是返回值,this.seq在这里就是list,对list遍历,这里执行op函数。

这里我们执行的是_+_,就是累加了10+1+2+3=16

关注
打赏
1587549273
查看更多评论
立即登录/注册

微信扫码登录

0.0418s