Scala實戰理解之集合
一,集合list[T]
[T]表示泛型,Scala會進行型別推導,所以一般沒有必要顯示指定型別T。
使用list的一些例子
1,定義一個list a
2,用”::” 連線操作符,左邊為元素,右邊為list,將元素新增進list成新的list b。
3,用”::” 連線操作符,先”z”連線Nil,再”y”連線”z和Nil”,以此類推。
等同於下:
4,“:::”連線符,連線兩個list。Int和String的公共型別為Any(值型別和引用型別公共型別為Any)。
5,List的.head方法
6,List的.tail方法
7,判斷函式isEmpty
8,遞迴遍歷函式
9,Fiter高階函式
可以看到,filter函式的引數為一個匿名函式,輸入引數x代表的就是列表裡面的一個元素,filter會遍歷列表中每一個元素,把每一個元素都去套用傳遞進來的匿名函式的判定條件,如果滿足匿名函式的條件,返回值為True就保留這個元素,否則就拋棄這個元素。
10,toList函式
toList函式將字串轉換成list。之後可以用filter保留其中的數值:
11,takewhile接受返回值為True或False的函式作為引數。當為True的時候就繼續取數,當不滿足的時候就停止取數。
可以看到,takewhile會遍歷列表中每一個元素,把每一個元素都去套用傳遞進來的匿名函式的判定條件,如果滿足匿名函式的條件,返回值為
12,map函式
map函式主要用來做元素的轉換或對映
看例子
map函式裡面傳入匿名函式,輸入引數x代表列表裡面的每一個成員,對於這個成員,將其大寫。
map函式用來把列表裡面每一個元素進行對映的高階函式,接受的引數為一個函式,作為引數的這個函式定義了具體的對映關係。
匿名函式的簡寫方法,下劃線用於通配,可通配x。
兩次list定義及通配
13,flatMap函式兩層list展平成一層list(也可自己寫程式碼遍歷取出)
總結一下map函式和flatMap函式的區別:map函式的返回值的型別和它的原來的集合的型別是一樣的,而flatMap
二,集合的規約操作
歸約操作即把集合的元素經過某種操作或某種運算規約為一個值。
1,reduceLeft
reduceLeft(op: (T, T) => T)
2,foldLeft
柯里化書寫方法foldLeft(z :U) (op :(U, T) => U)
“z”是規約初始值,規約後值的型別和規約初始值的型別相同。
三,Range
Range就是一個整數序列。
定義一個Range
用”to”
用“util”
四,Stream
Stream是一個Lazy List,即惰性求值列表。
看例子:
可以看到,”?”表明對於第一個元素,值是確定的,對於其他的元素,是不進行求值的。只有當用到它的時候才會進行求值,即按需求值。
如同list,Stream也有head函式和tail函數
五,Tuple
相當於資料庫中的記錄的概念,如果有兩個值,稱之為”pair”。
看例子
1,定義一個Tuper(兩種方式):
2,遍歷元組的元素
3,應用Tuple
六,Map[K ,V]
1,定義一個Map
2,取Map中的值
3,Map中新增一個元素(+)或多個元素(++)
4,Map中刪除一個元素(-)或多個元素(--)
5,綜合新增刪除元素
七,綜合例子---快速排序
八,一些資源閱讀材料
http://docs.scala-lang.org/overviews/collections/introduction.html