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

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