foldLeft && foldRight

Let,s see something

(1 to 3).foldRight(3)(_-_) == -1

(1 to 3).foldLeft(3)(_-_)  == -3

why it is different

foldLeft定义:

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

    var result = z  

    this.seq foreach (x => result = op(result, x))  

    result  

  }  

foldRight定义:

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

    reversed.foldLeft(z)((x, y) => op(y, x)) 

下面我们来解释foldLeft和foldRight的不同之处:

(1 to 3).foldRight(3)(_-_) == -1

(1 to 3).foldLeft(3)(_-_)  == -3

foldLeft:3-1-2-3 == -3

foldRight:3-(2-(1-3)) == -1

我们发现foldLeft和foldRight是完全对称的,所以如果我们交换一下f的参数位置

object file {
  def main(args:Array[String])
  {
    println((1 to 3).foldRight(3)((i,sum)=>sum-i))
    println((1 to 3).foldLeft(3)((i,sum)=>i-sum))  //exchange sum & i
  }
  
}

result:
-3
-3

就会得到一样的结果

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 14,357评论 0 33
  • Java经典问题算法大全 /*【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子...
    赵宇_阿特奇阅读 5,955评论 0 2
  • 【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔...
    叶总韩阅读 10,542评论 0 41
  • 我走在路上,深蓝色的夜空中点缀着些浅浅的星子,空气凉浸浸的。 星光是很暗的,怎么也看不清脚下,弄不清楚哪里是平的,...
    小楼明月阅读 1,144评论 0 1
  • 芒果台最近肯定是爱上了美食类题材,前有人间至味是清欢,中餐厅,后就有姐今天要说的这部《美味奇缘》了。 像这样小清新...
    娱乐拆穿姐阅读 2,767评论 0 0

友情链接更多精彩内容