一,集合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會遍歷列表中每一個元素,把每一個元素都去套用傳遞進來的匿名函數的判定條件,如果滿足匿名函數的條件,返回值爲True就繼續取數,否則就終止這個取數。
12,map函數
map函數主要用來做元素的轉換或映射
看例子
map函數裏面傳入匿名函數,輸入參數x代表列表裏面的每一個成員,對於這個成員,將其大寫。
map函數用來把列表裏面每一個元素進行映射的高階函數,接受的參數爲一個函數,作爲參數的這個函數定義了具體的映射關係。
匿名函數的簡寫方法,下劃線用於通配,可通配x。
兩次list定義及通配
13,flatMap函數兩層list展平成一層list(也可自己寫代碼遍歷取出)
總結一下map函數和flatMap函數的區別:map函數的返回值的類型和它的原來的集合的類型是一樣的,而flatMap函數對於兩層的list會轉換成一層。
二,集合的規約操作
歸約操作即把集合的元素經過某種操作或某種運算規約爲一個值。
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