您的位置:首页 > 其它

Scala学习笔记-映射和元组

2017-10-20 09:40 369 查看
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)// 打印 <<---------->>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  scala spark 快学scala