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