1. 程式人生 > >scala 高級十六 scala 集合和集合的高級特性 map flatten fllatmap zip reduce zip 等操作

scala 高級十六 scala 集合和集合的高級特性 map flatten fllatmap zip reduce zip 等操作

高級 類型 strong nbsp println 參數 highlight 匿名 pri

1. scala 的列表List 和集Set 的操作

  //Set 和list 差不多,不過 Set 中不允許有重復的元素
var set=scala.collection.mutable.Set[Int]();

//+ 會產生一個新的對象,而不是在set 中動態增加
set.+(1)
//+= 會在原先的set 中動態的增加元素而不是產生一個新的對象。
set.+=(1,2,3)

//這個會輸出一個排序以後的 集合 比如 輸入 7,4,8,6,1 輸出 1,46,7,8
import scala.collection.mutable.SortedSet

var sort=SortedSet[Int]()
sort.+=(7,4,8,6,1)

sort.foreach(println)

2. 集合的函數組合子(Functional Combinators)

map

map對列表中的每個元素應用一個函數,返回應用後的元素所組成的列表。


  var lst=List(1,2,3,4)
    
    //Map 映射到list 集合中的沒一位,然後結構乘以2
    lst.map((x:Int)=>x*2)
    //上一步的匿名函數簡化 去掉類型,系統推斷類型
    lst.map(x=>x*2)
    //進一步簡化直接寫返回表達式
    var li= lst.map(_*2)
    
    for(x<-li)
      println(x)

技術分享

foreach

foreach很像map,但沒有返回值。foreach僅用於有副作用[side-effects]的函數。

   var lst=List(1,2,3,4)
    
    //用foreach 輸出list中的參數
    lst.foreach((x:Int)=>{println(x*2)})
    
    //精簡後的foreach
    lst.foreach(_*2)

技術分享

filter

filter移除任何對傳入函數計算結果為false的元素。返回一個布爾值的函數通常被稱為謂詞函數[或判定函數]。

    var lst=List(1,2,3,4)
    
    //過濾>2 的所有蒜素
    lst.filter((x:Int)=>x>2).foreach(println)
    //精簡後的結構
    lst.filter(_>2).foreach(println)

技術分享

flatten

flatten將嵌套結構扁平化為一個層次的集合。

技術分享

flatMap

flatMap是一種常用的組合子,結合映射[mapping]和扁平化[flattening]。 flatMap需要一個處理嵌套列表的函數,然後將結果串連起來。

技術分享

Reduce

reduece 下面的函數 通過reduce 把所有的參數相加

技術分享

fold

fold 類似於reduce 不過不同的是 fold 需要兩個參數,一個參數用來設置偏移量, 比如下面的例子,偏移量是10 ,加上reduce 運算的10 得20

技術分享

zip

zip將兩個列表的內容聚合到一個對偶列表中。

技術分享

sum,max,min 操作

技術分享

 

scala 高級十六 scala 集合和集合的高級特性 map flatten fllatmap zip reduce zip 等操作