### 1. 構造映射
-
映射是鍵值對偶的集合,映射只做查詢。
-
構造一個不可變的Map[String, Int]。
~~~
val scores = Map("Alice" -> 10, "Aaron" -> 20, "Bob" -> 13) // 這兩種方法等價
val scores = Map(("Alice", 10), ("Aaron", 20), ("Bob", 13))
~~~
- 構造一個可變的映射。
~~~
val scores = scala.collection.mutable.Map("Alice" -> 10, "Aaron" -> 20, "Bob" -> 13)
~~~
- 構造一個空的映射。
~~~
// chapter01 中提到如果沒有初始化是要用new函數的
val scores = new scala.collection.mutable.HashMap[String, Int]
~~~
### 2. 獲取映射中的值
- 若映射不包含請求中使用的鍵,要檢查有某個鍵要用contains方法,組合語句是getOrElse。
~~~
val Bobscore = scores("Bob") // 獲取“Bob"對應的值
val bobsocre = if (scores.contains("BoB")) scores("Bob") else 0
val bobsocre = scores.getOrElse("Bob", 0) // 與上面的第二條語句等價
~~~
### 3. 更新鍵中的值
- 映射可變
~~~
socres("Bob") = 10 // 更新鍵“Bob”值
scores("Fred") = 7 // 添加新鍵值對
scores += ("Bob" -> 10, "Fred" -> 7) // +=可以添加多個
socres -= "Alice" // 移除某個鍵值對
~~~
- 若映射是不可變的,可以用同樣的方法獲取一個包含所需要的更新的新映射。
~~~
val newScores = scores + ("Bob" -> , "Fred" -> 7)
~~~
- 還可以將scores定義為var直接更新var變量。
~~~
var scores = Map("Alice" -> 10, "Aaron" -> 20, "Bob" -> 13)
scores = scores + ("Bob" -> 13, "Fred" -> 7)
scores = scores - "Alice" // 移除某個鍵值對
~~~
### 4. 迭代映射
- 用`for ((k, v) <- 映射)`就可以遍歷所有鍵值對。若只需訪問鍵或值,用`values`和`keySet`方法。
~~~
for ((k, v) <- scores) println(k + v)
for (k <- scores.keySet) println(k)
for (v <- scores.values) println(v)
~~~
### 5. 已排序映射
- 要的的一個不可變的樹形映射而不是默認的哈希映射的話,可以用:
~~~
val scores = scala.collection.immutable.SortedMap("Alice" -> 10, "Aaron" -> 20, "Bob" -> 13)
~~~
- scala中可變的樹形映射還沒有
### 6. 元組
-
元組(tuple `['tjup(?)l]`)是不同類型的值的聚集,映射是鍵值對偶的集合,對偶是元組的最簡單形態。
-
訪問元組的組元,用`_1、_2、_3`方法,元組下表是從**1**開始。
~~~
val t = (1, 2.2323, "Bob")
val second = t._2
val second = t _2//點也可以用空格來表示
~~~
- 用模式匹配來獲取元組的組元,不需要的組元用`_`表示。
~~~
val (first, second, third) = t
val (first, second, _) = t
~~~
- 元組可用于函數返回多個值得情況。
### 7. 拉鏈操作
- 元組就是把多個值綁定在一起,可以用`zip`操作,`toMap`方法將對偶轉成映射。
~~~
val name = Array("Bob", "Fred")
val scores = Array(2, 4)
val pairs = name.zip(counts) // 得到元組
val score = pairs.toMap // 轉成映射(哈希表)
~~~
【待續】