Scala学习笔记-映射和元组

本文详细介绍了Scala中的映射(Map)概念及其操作方法,包括构造、获取、更新、迭代映射,以及如何处理已排序映射。此外,还探讨了元组的使用和拉链操作(zip),并涉及Scala与Java映射之间的互操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.构造映射

映射是键值对偶的集合。

1)不可变映射,其值不能被修改

val scores=Map(" Alice"->10,"bob"->3,"merry"->5)或者

val scores=Map((" Alice",10),("bob",3),("merry",5))

2)可变映射

val scores=scala.collect.mutable.Map(" Alice"->10,"bob"->3,"merry"->5)

3) 空映射,必须给出类型参数

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

2. 获取映射中的值

1)查找键对应的值

 val bobscore=scores("bob")  //类似与java中的scores.get("bob")

如果映射中不包含请求中的键,则抛出异常

2)查找映射中是否存在某个键

val bobscore=if(scores.contains("bob"))  scores("bob") else 0 简写方法:

val bobscore=scores.getOrElse("bob",0)

3. 更新映射中的值

在可变映射中

1)更新映射的值

scores("bob")=10

2) 添加映射键值对

scores("fred")=7

3) 添加多个关系

scores += ("bob"->10,"fred"->7)

4) 移除某个键值对

scores -="bob"

不能更新一个不可变的映射,但是可以获取一个包含所有需要的更新的新映射:

val newScores=scores+ ("bob"->10,"fred"->7)  //更新过的新映射

newScores映射包含了与scores相同的映射关系,此外“bob”被更新,“fred"被添加

删除操作与可变映射相同

4. 迭代映射

1)遍历映射中所有的键值对:

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

2) 只访问键

scores.keySet

3)只访问值

scores.values

4)交换键值对位置

for( (k, v) <-映射)  yield( v,k)

5. 已排序映射

映射实现由哈希表和平衡树,默认是哈希表

val scores=new scala.collect.mutable.HashMap(" Alice"->10,"bob"->3,"merry"->5)   //哈希映射

val scores=new scala.collect.mutable.SortedMap(" Alice"->10,"bob"->3,"merry"->5)  //树映射

6. 与java的互操作

1) java映射转scala映射

方法一:

引入 import scala.collection.JavaConbersions.mapAsScalaMap

指定scala映射类来触发转换:

val  scores: scala.collection.mutable.Map[String,Int]=new java.util.TreeMap[String,Int]

方法二:

得到从java.util.Properties到Map[String,String]的转换:

import scala.collection.JavaConversions.proprtireAsScalaMap

val props: scala.collection.Map[String,String]=System.getProperties()

2)scala映射转java映射

import scala.collection.JavaConversions.mapAsJavaMap

import java.awt.font.TextAttribute._  //引入下面映射会用到的键

val attrs=Map(FAMILY -> "Serif",SIZE->12)

val font=new java.awt.Font(attres)

7.元组

映射是键值对偶的集合。对偶是元组最简单的形态,元组是不同类型的值的聚集

例如: (1,3.14,”fred“)类型为Tuple3[Int, Double ,java.long.String]

可以用方法_.1、_.2、_.3访问其组元。例如 val s=t._2  //s设为3.14

和数组或者字符串不同,元组各组元从1开始,而不是0

可以使用模式匹配来获取元组的组元,例如:

val  (first , second , third )=t  //将first设为1,second设为3.14,third 设为”fred“

如果不是所有部件都需要,可以在不需要的部件位置上使用 _:

val  (first , second , _ )=t  

元组还可以用于函数需要返回不止一个值的情况

8. 拉链操作

使用元组的原因之一是把多个值绑在一起,以便它们能够一起被处理,这通常可以用zip方法来完成。例如:

val symbols=Array("<","-",">")

val counts=Array(2,10,2)

val pairs=symbols.zip(counts)       //输出对偶Array(("<",2),("-",10),(">",2))

这些对偶可以一起被处理:

for( (s,n)<- pairs)  Consile.print(s*n)// 打印 <<---------->>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值