《快學Scala》——數組、映射和元組

編程語言 Scala Java Java虛擬機 科技優家 2017-05-16
《快學Scala》——數組、映射和元組

數組

定長數組:在Scala中可以用Array,初始化一個定長數組。例如:

val nums = new Array[Int](10)  //10個整數的數組,所有元素初始化為0
val a = new Array[String](10)  //10個元素的字符串數組,所有元素初始化為null
val s = Array("Hello", "Scala")  //長度為2的字符串數組
s(0) = "Hi"  //使用來訪問數組中的元素,使得s變成Array("Hi","Scala")
《快學Scala》——數組、映射和元組

注:已提供初始值就不需要使用new

在JVM中,Scala的Array以Java數組方式實現,如字符串數組對應java.lang.StringIntDouble等基本數據類型對應Java中都是基本數據類型數組,如Array(2,3,4)在JVM中就是一個int

變長數組(數組緩衝):Scala中使用ArrayBuffer來實現。使用前需要引入包import scala.collection.mutable.ArrayBuffer

1.用+=在尾部添加元素。

2.用+=在尾部添加多個元素,用括號包起來。

3.用++=追加任何元素。

4.移除尾部的三個元素。

《快學Scala》——數組、映射和元組

insert可以在任意位置插入元素。remove可以在任意位置刪除元素。缺點是:這樣做需要移動後面的元素。

變長數組可以和定長數組之間相互轉換,通過使用toArraytoBuffer

轉換:在Scala中,可以用某種方式對一個數組(或數組緩存)進行轉換,這種操作不會修改原數組,而是產生新的數組。如下:

for(...) yield循環創建了一個類型與原始集合相同的集合。

遍歷:使用for循環遍歷數組或數組緩衝。如下:

for (i <- 0 until a.length)
println(i + ": " + a(i))

until:返回所有小於上限的數字。

也可以使用如下方法:

for (elem <- a)
println(elem)

多維數組:Scala中多維數組是通過數組的數組實現的。如:Array[Array[Int]],也可以使用ofDim方法。如下:

第一個是生成10行的二維數組,但列數不確定。

第二個是生成3*4的二維數組。

在Scala API文檔中還有許多關於數組的函數,比如summaxmin等。這裡介紹一個mkStringtoString

當需要顯示數組或者數組緩衝就可以使用mkString方法,這個方法還可以指定元素之間的分割符。如下:

而對於toString方法,Array只會生成沒意義的地址碼。ArrayBuffer會被完全轉化成String。如下:

《快學Scala》——數組、映射和元組

映射

構造映射:

構造不可變映射Map[String,Int],其中的值不能被改變:

val scores1 = Map("Alice" -> 10, "Bob" -> 3, "Cindy" -> 8)
val scores2 = Map(("Alice", 10), ("Bob", 3), ("Cindy", 8))

構造可變映射

val scores = scala.collection.mutable.Map("Alice" -> 10, "Bob" -> 3, "Cindy" -> 8)

構建一個空映射

val scores = scala.collection.mutable.HashMap[String, Int]

在Scala中映射是 對偶的集合,就是用兩個值構成一個組。

獲取映射值:

使用來獲取某個鍵對應的值。如:

val bobscore = scores("Bob")

若映射中不包含這個鍵,將會拋出異常。Scala中可以使用 contains方法判斷映射中是否包含某個鍵。為了防止拋出異常也可以這麼做:

val bobscore = scores.getOrElse("Bob", 0)  //如果沒有Bob這個鍵就返回0

更新映射值:

可變映射中可以更新映射的值或者添加新的映射關係,做法是在=的左側使用,如下:

scores("Bob") = 10  //更新Bob的值
scores("xiaoming") = 5  //添加新的鍵值對

也可以使用+=來增加多個鍵值對(如果有相同的鍵則更新對應的值),用-=來移除某個鍵值對。如下:

《快學Scala》——數組、映射和元組

對於不可變映射,可以使用如下方法對映射進行更新和刪除,更新後會生成一個新映射

val newScores = scores + ("Bob" -> 10, "Freb" -> 7)  //更新
val newScores = scores - ("Bob" -> 10)   //刪除

迭代:

for((k, v) <- 映射)  處理k和v

如果只需要訪問鍵或值,則可以用keySetvalues方法。values方法返回一個Iterable,這樣就可以在for循環中使用這個'Iterable'。如下:

scores.keySet  //生成一個類似Set("Bob","Cindy","Fred")這樣的集合
for(v <- scores.values) println(v)  //將打印value值

元組

映射是鍵值對偶的集合,對偶是元組(tuple)的最簡單的形態。元組是不同類型的值的聚集。元組的值是通過將單個的值包括在圓括號中構成。元組的初始化、讀取元素和模式匹配的操作如下:

《快學Scala》——數組、映射和元組

注:其中t._2用來讀取元組中的第二個元素。(f,s,_)中的_表示這個位置的元素不需要。

相關推薦

推薦中...