第37講:List的foldLeft、foldRight、sort操作代碼實戰

請看代碼示例:

package com.dt.scala.dataset

object List_Fold_Sort {
  def main(args: Array[String]): Unit = {
    //Fold是摺疊的意思,foldLeft就是從左摺疊,foldRight就是從右摺疊
    val list = List.range(1, 101) // 1 .. 100
    //foldLeft有兩個參數:z 初始值,f 疊加函數
    var result = list.foldLeft(0)(_+_)
    //初始值於第一個元素做加法運算,等到的結果和第二個再做加法,以此類推下去
    println(result) // 5050
    //還有一個簡化的寫法,如下
    result = (0 /: list)(_+_) 
    
    println(List.range(1, 5).foldLeft(100)(_-_))  // 100-1-2-3-4 = 90
     
    // /:方法與foldLeft 相同 。 
    
    //foldRight 於foldLeft類似,只不過是從列表的尾部疊加函數
    println(List.range(1, 5).foldRight(100)(_-_))  // 1-(2-(3-(4-100))) = 98
    
    //foldLeft於reduce的區別,reduce不用提供初始值
    println(list.reduce(_+_)) //5050
    
    val list2 = List(3,9,1,4,8,7)
    //Sorted Will sort the list using the natural ordering
    //升序排列列表
    println(list2.sorted)
    //降序
    println(list2.sorted(Ordering.Int.reverse))
    // 使用特殊的算法排序
    val list3 = List("Spark","Hadoop","Zookeeper","Scala Language")
    //按照元素長度排序
    println(list3.sortWith(_.length > _.length))
    //按照首字母排序
    println(list3.sortWith(_.head < _.head)) 
    // 按照符合條件排序
    println(list3.sortBy(x =>(x.head,x.length())))
    
  }
}


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