1. 程式人生 > >Scala實戰理解之集合

Scala實戰理解之集合

一,集合list[T]

[T]表示泛型,Scala會進行型別推導,所以一般沒有必要顯示指定型別T

使用list的一些例子

1,定義一個list a

2”::” 連線操作符,左邊為元素,右邊為list,將元素新增進list成新的list b

 

3,”::” 連線操作符,先”z”連線Nil,”y”連線”zNil,以此類推。

 

等同於下:

4“:::”連線符,連線兩個listIntString的公共型別為Any(值型別和引用型別公共型別為Any)

 

5List.head方法

 

6List.tail方法

 

7,判斷函式isEmpty

 

8,遞迴遍歷函式

 

9Fiter高階函式

 

可以看到,filter函式的引數為一個匿名函式,輸入引數x代表的就是列表裡面的一個元素,filter會遍歷列表中每一個元素,把每一個元素都去套用傳遞進來的匿名函式的判定條件,如果滿足匿名函式的條件,返回值為True就保留這個元素,否則就拋棄這個元素。

10toList函式

toList函式將字串轉換成list。之後可以用filter保留其中的數值:


11takewhile接受返回值為TrueFalse的函式作為引數。當為True的時候就繼續取數,當不滿足的時候就停止取數。


可以看到,takewhile會遍歷列表中每一個元素,把每一個元素都去套用傳遞進來的匿名函式的判定條件,如果滿足匿名函式的條件,返回值為

True就繼續取數,否則就終止這個取數。

12map函式

map函式主要用來做元素的轉換或對映

看例子

 

map函式裡面傳入匿名函式,輸入引數x代表列表裡面的每一個成員,對於這個成員,將其大寫。

map函式用來把列表裡面每一個元素進行對映的高階函式,接受的引數為一個函式,作為引數的這個函式定義了具體的對映關係。

匿名函式的簡寫方法,下劃線用於通配,可通配x

 

兩次list定義及通配

 

13flatMap函式兩層list展平成一層list(也可自己寫程式碼遍歷取出)

總結一下map函式和flatMap函式的區別:map函式的返回值的型別和它的原來的集合的型別是一樣的,而flatMap

函式對於兩層的list會轉換成一層。

二,集合的規約操作

歸約操作即把集合的元素經過某種操作或某種運算規約為一個值。

1reduceLeft

reduceLeft(op: (T, T) => T)

 

2foldLeft

柯里化書寫方法foldLeft(z :U) (op :(U, T) => U)

“z”是規約初始值,規約後值的型別和規約初始值的型別相同。

 

三,Range

Range就是一個整數序列。

定義一個Range

”to”

“util”

 

四,Stream

Stream是一個Lazy List,即惰性求值列表。

看例子:

 

可以看到,”?”表明對於第一個元素,值是確定的,對於其他的元素,是不進行求值的。只有當用到它的時候才會進行求值,即按需求值。

如同listStream也有head函式和tail

 

五,Tuple

相當於資料庫中的記錄的概念,如果有兩個值,稱之為”pair”

看例子

1,定義一個Tuper(兩種方式):

2遍歷元組的元素


3,應用Tuple


六,Map[K ,V]

1定義一個Map

2,取Map中的值


3Map中新增一個元素(+)或多個元素(++


4Map中刪除一個元素(-)或多個元素(--


5綜合新增刪除元素


,綜合例子---快速排序

 

八,一些資源閱讀材料

http://docs.scala-lang.org/overviews/collections/introduction.html