Chapter04 映射和元组

最后更新于:2022-04-01 20:28:01

### 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 // 转成映射(哈希表) ~~~ 【待续】
';