- 類型參數化數組
~~~
val arr = new Array[String](3);
arr(0) = "Hello";
arr(1) = ",";
arr(2) = "World";
~~~
~~~
這里的arr(0) = "Hello";將被轉化為arr.update(0,"Hello");即函數的調用
~~~
- 使用列表
1. Scala是可變的同類對象序列,而不可變的同類對象序列是列表類;
`val lst = List(1, 2, 3);`
1. 列表本身不可變
1. 提供方法 ::: 實現疊加功能
~~~
val fstList = List(1, 2);
val sndList = List(3, 4);
val trdList = fstList ::: sndList;
println(trdList)
~~~
~~~
結果:
~~~
~~~
List(1, 2, 3, 4)
~~~
提供方法 :: 將新元素組合到現有列表的最前端,產生新列表作為結果返回;
空列表簡寫為: Nil
-
元組
元組是不可變的;
元組可以包含不同類型的元素;
val pair = (6299, “iPad Pro”);
用方法 _數字(從1開始) 訪問元組的組元
pair _1 //結果:6299
為什么不能用訪問列表的方法來訪問元組?
因為列表的apply方法始終返回同樣的類型,但元組里的類型不盡相同。所以訪問方法也不一樣。
列表的索引腳標是基于0的,而元組則是基于1的(Haskell和ML等含有靜態類型元組的語言,從1開始是傳統的設定)。
-
集(set)和映射(map)
Scala的集合庫區分為可變類型和不可變類型;
-
Set
Scala API 中提供了一個set的基本特質,還提供了兩個子特質,分為可變和不可變;
~~~
var jetSet = Set("Scala", "Program");
jetSet += "GO";
~~~
~~~
jetSet是默認的不可變集,初始化為包含了兩個字符串的集,創建set的方法和創建list和array的類似,通過其伴生對象的apply工廠方法。
方法 + 對于不可變集來說,會產生一個全新集,對可變集來說則是把元素加入自身。
~~~
-
Map
與set類似;
~~~
import scala.collection.mutable.Map
val map = Map[Int, String]();
map += (1,"one");
map += (2, "two");
~~~
~~~
map也可表示為 (1 -> "one");
鍵值對,訪問map(k)得到相應的value;
~~~
-
函數式風格
多練習Scala集合庫中的方法對體會函數式編程風格很有幫助;
崇尚val,不可變對象和沒有副作用的方法;
-
從文件中讀取文本行
引用scala.io的Source類
方法 getLine 返回Iterator[String]