Scala中规约操作reduce与fold函数

规约操作是对容器的元素进行两两运算,将其“规约”为一个值。

常用的规约方法有reduce和fold,两个方法唯一的差别是, reduce是从容器的两个元素开始规约,而fold则是从提供的初始值开始规约。

同样地,对于无序容器而言, fold方法不保证规约时的遍历顺序,如要保证顺序,请使用foldLeft和foldRight,其中,关于匿名函数参数的定义,与reduceLeft和reduceRight完全一样。

reduce

最常见的规约方法是 reduce方法,它接受一个二元函数f作为参数,首先将f作用在某两个元素上并返回一个值,然后再将f作用在上一个返回值和容器的下一个元素上,再返回一个值,依此类推,最后容器中的所有值会被规约为一个值。

  @Test
  def testReduce(): Unit ={
    /**
     * 测试reduce与fold
     */
    val list=1 to 10

    val newList=list.reduce(_+_)

    println(newList)
  }

输出结果

55

fold

与reduce方法非常类似的一个方法是fold方法。fold方法是一个双参数列表的函数,第一个参数列表接受一个规约的初始值,第二个参数列表接受与reduce中一样的二元函数参数。

  @Test
  def testFold(): Unit ={
    /**
     * 测试reduce与fold
     */
    val list=1 to 10

    val newList=list.fold(100)(_+_)

    println(newList)
  }

输出结果

155
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章