立即注册 登录
About云-梭伦科技 返回首页

一颗银杏树的个人空间 https://www.aboutyun.com/?53709 [收藏] [复制] [分享] [RSS]

日志

《快学scala》学习笔记之第四章:映射和元组

已有 692 次阅读2017-5-11 09:27 |个人分类:scala| scala, 元组, 映射, 拉链

映射是对偶的集合,对偶就是两个值构成的组,比如("Alice",10)

4.1 构造映射
不可变
val scores = Map("Alice" -> 10,"Bob" -> 3,"Cindy" -> 8)   //其值不可变
可变
val scores = new scala.collection.mutable.HashMap[String,Int]   //空映射需要给定类型参数
val scores = scala.collection.mutable.Map("Alice" -> 10,"Bob" -> 3,"Cindy" -> 8)
4.2 获取映射中的值
val bobScore = scores("Bob")      //类似于java中的scores.get("Bob")
val bobScore = scores.getOrElse("Bob",0) //等价于if(scores.contains("Bob")) scores("Bob") else 0
4.3 更新映射中的值
scores("Bob") = 10  //将Bob的值设为10
scores("Fred") = 7  //增加新的键、值到scores中,前提是此映射是可变的
scores += ("Bob" -> 10,"Fred" -> 7) //增加多个关系
scores -= "Alice"
val newScores = scores + ("Bob" -> 10,"Fred" -> 7)   //将不可变的映射放到另外一个映射当中
更新不可变的映射:
var scores = Map("Alice" -> 10,"Bob" -> 3,"Cindy" -> 8)   //记住这里是用的var,切不可是val
scores = scores + Map("Tom" -> 10,"Jack" -> 3)
scores = scores - "Alice"
4.4 迭代映射
for ((k,v) <- 映射名) 处理k和v
scala> for((k,v) <- scores) println(k + "=" + v )
Alice=10
Bob=3
Cindy=8
scala> scores.keySet
res1: scala.collection.immutable.Set[String] = Set(Alice, Bob, Cindy)
scala> scores.values
res2: Iterable[Int] = MapLike(10, 3, 8)
scala> for((k,v) <- scores) yield (v,k)   //k、v值颠倒
res3: scala.collection.immutable.Map[Int,String] = Map(10 -> Alice, 3 -> Bob, 8 -> Cindy)
4.5 已排序映射
val scores = scala.collections.immutable.SortedMap("Alice" -> 10,"Fred" -> 7,"Bob" -> 3,"Clindy" -> 8)

4.6 与java的互操作

4.7 元组
元组是不通类型值的集合,用圆括号包起来的
val t = (1,3.14,"Fred")   //这就是一个元组,类型是Tuple3[Int,Double,java.lang.String]
访问元组:
val second = t._2  //second的值为3.14 ,元组的各组员是从1开始的,而不是从0
val (first,second,third) = t   //使用模式匹配来获取元组的组元,将first设置为1,second设置为3.14,third设置为"Fred"
val (first,second,_) = t  //这里只设置first和second,
4.8 拉链操作
元组的作用之一是将多个值绑在一起处理,用zip方法完成。
val symbols = Array("<","-",">")
val counts = Array(2,10,2)
val pairs = symbols.zip(counts)
pairs: Array[(String, Int)] = Array((<,2), (-,10), (>,2))
for((s,n) <- pairs) print(s*n) 
<<---------->> //输出结果

将分别为键和值的元组转换为映射:
val key = Array(1,2,3)
val values = Array("Bob","Jack","Top")
val keyandvalues = keys.zip(values).toMap


路过

雷人

握手

鲜花

鸡蛋

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 立即注册

关闭

推荐上一条 /2 下一条