四、Scala映射与元组

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

猜你喜欢

转载自blog.csdn.net/Cxf2018/article/details/109412372