1.构造映射
构造一个不可变/可变的Map
val scores = Map("a"->10,"b"->11,"c"->12)
val scores = scala.collection.mutable.Map("a"->10,"b"->11,"c"->12)
从一个空映射开始构造
val scores = scala.collection.mutable.Map[String,Int]()
映射是对偶的集合,对偶是两个值构成的组,这两个值不一定是同一个类型的,用"a"->10
可以创建对偶,其值为("a",10)
映射定义的另一种方式
val scores = Map(("a,10),("dsad",10))
2.获取映射中的值
获取值可以直接使用()
val bobsSocre = scores("a")
//如果映射中不存在该键,则该方法会抛出异常
检查映射中是否包含某个指定的键,则使用contain
方法
val bobSocre = if(scores.contains("a") scores("a) else 0
或者直接使用scores.getOrElse("a",0)
来代替上面的做法
还可以给不存在的键设置默认值
scores.withDefaultValue(0)//当搜索的键不存在时,就会交出0
3.更新映射中的值
①在可变映射中更新的方式由
scores("a") = 11
scores+=("cc",101)
scores-="a"
②对于不可更新的映射,可以对其操作生成一个新的映射
val newScores = scores + ("Bob"->10,"Ffff"->7)
scores += ("Bob"->10,"Ffff"->7)
scores = scores - "Bob"
scores -= "Bob"
4.迭代映射
遍历映射
for ((k,v) <- 映射) 处理 k 和 v
只访问键或者值
scores.keySet
for (v<-scores.values) println(v)
5.已排序映射
映射的实现有两种方式:哈希表和平衡树
默认情况下,映射是基于哈希表实现的,因为它更高效,但是不能保证元素的顺序,如果想按照顺序一次访问映射中的键,可以使用SortedMap
,如果想按照插入时的顺序访问键,则使用LinkedHashMap
val scores = scal.collection.mutable.SortedMap(……)
val months = scala.collection.mutable.LinkedHashMap(……)
6.与Java的互操作
①如果通过Java方法调用得到了一个Java映射,你可能想要把它转换成一个Scala映射,则需要增加如下语句:import scala.collection.JavaConversions.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.propertiesAsMap
val props:scala.collection.Map[String,String] = System.getProperties()
③还有将Scala中的映射传递给预期Java映射地方法,此处不在展开
7.元组
映射是键/值对偶的集合。对偶是元组最简单形态——元组是不同类型值的聚集。
元组举例:val t =(1,3.14,”Fred“)
,可以用_1,_2,_3
来访问元组中的组元,不过可以把t._2
写成t _2
可以用模式匹配来获取元组的组成部件:val (first,second,third) = t
,此时first=1,second=3.14,third="Fred"
;
如果不需要元组中所有的不见,则可以在不需要使用的部件上用_
代替val (first,second,_)=t
;
元组可以用于函数返回不止一个值得情况:"New York".partition(_.isUpper)
,结果为("NY","ew ork")
8.拉链操作
拉链就是将多个值绑在一起,以便他们能够一起被处理
val symbols = Array("<-","-","->")
val count = Array(2,10,2)
val pairs = symbols.zip(count)
得到的结果是:Array(("<-",2),("-",10),("->",2))
另外使用topMap
方法可以将对偶转化为映射:keys.zip(values).toMap