《快学scala》- 第4章 映射和元组

第4章 映射和元组
映射是键值对偶的集合。对偶就是两个值构成的组,这两个值并不一定是同一种类型。

4.1 构造映射
创建对偶:“Alice” -> 10,即(“Alice”,10)
不可变映射:val scores = Map(“Alice” -> 10, “Bob” -> 3, “Cindy” -> 8)
或:val scores = Map((“Alice”,10), (“Bob”,3), (“Cindy”,8))
可变映射:val scores = scala.collection.mutable.Map(“Alice” -> 10, “Bob” -> 3, “Cindy” -> 8)
空映射:val scores = new scala.collection.mutable.HashMap[String, Int]

4.2 获取映射中的值
()检索键值:scores(“Bob”)
contains检查是否存在某个键:if (scores.contains(“Bob”)) scores(“Bob”) else 0
gerOrElse方法简写:scores.getOrElse(“Bob”,0)
get方法:scores.get(“Bob”) 返回值或None

4.3 更新映射中的值
可变映射的操作,val scores = scala.collection.mutable.Map(“Alice” -> 10, “Bob” -> 3, “Cindy” -> 8)
更新或增加一对键值:scores(“Bob”) = 10 ,scores(“Fred”) = 7
+=更新或增加对偶:scores += (“Bob” -> 10, “Fred” -> 7)
-=移除对偶:scores -= “Alice”
对于不可变映射Map,虽然不可以直接更新映射本身,但同样可以执行操作,生成一个新映射。
val newScores = scores + (“Bob” -> 10, “Fred” -> 7)
使用var定义变量,时变量可以重新赋值。
var scores = …
scores = scores + (“Bob” -> 10, “Fred” -> 7)
scores = scores - “Alice”

4.4 迭代映射
for + 模式匹配遍历映射:for((k,v) <- 映射) 处理k和v
keySet方法:for (k <- scores.keySet) println(k)
values方法:for (v <- scores.values) println(v)
交换键和值位置:for ((k,v) <- scores) yield (v,k)

4.5 已排序映射
内存中实现映射的两种数据结构,即如何组织keys检索values。
哈希表(keys -> Hash Map -> values address)和平衡树(keys -> Tree Index -> values address)
scala默认哈希表,树的实现方法:val scores = scala.collection.immutable.SortedMap(“Alice” -> 10, “Bob” -> 3, “Cindy” -> 8)

4.6 与Java的互操作
一种数据类型,即一个类,包含自身定义的数据结构与方法。
import scala.collection.JavaConversions._引入scala相关方法后,可以实现Java和Scala类型转换转换。

4.7 元组
元组是一个不同类型数据的聚集。一个对偶(键值对)是一种最简单形式的元组,即只有两个类型数据聚集。
定义元组,()括号,逗号,val t = (1, 3.14, “Fred”)
._或 _调用元组组元:t._2 或 t _2(t后需要有空格或点号)
模式匹配批量获取组元:val (first, second, third) = t
只获取部分组元,_占位:val (first, second, _) = t

4.8 拉链操作
可将两个数组,元素两两组合,输出对偶数组(zip),并可进一步生成映射(toMap)。
val symbols = Array ("<", “-”, “>”)
val counts = Array (2, 10, 2)
val pairs = symbols.zip(counts) => pairs: Array[(String, Int)] = Array((<,2), (-,10), (>,2))
val maps = symbols.zip(counts).toMap => maps: scala.collection.immutable.Map[String,Int] = Map(< -> 2, - -> 10, > -> 2)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值