问题:
1、Map(映射)的操作
2、Tuple(元组)的操作
1、映射
映射是键/值对偶的
val scores=Map("Alice"->10,"Bob"->3,"Cindy"->8)
上述代码构造出一个不可变的Map[String,Int],其值不能被改变,如果你想要一个可变映射可以用
var score=scala.collection.mutable.Map("Alice"->10,"Bob"->3,"Cindy"->8)
如果你只是想定义一个空的映射,你需要选定一个映射实现并给出类型参数
val scoress=new scala.collection.mutable.HashMap[String,Int]
获取映射中的值
val bobsScore=scores("Bob")
如果用上面的方法会存在一个问题,如果请求中没有这个键,那么就会抛出异常
所以我们应该这么写
val bobs=if (scores.contains(“Bob”)) scores(“Bob”) else 0
println(bobs)
简介的写法是
val bob=scores.getOrElse(“Bob”, 0)
println(bob)
更新映射中的值 假设score是一个可变的映射
score(“Bob”)=10 更新原来的值
score(“Fred”)=9 增加一个键/值对
score +=(“xlucas”->20,”xulu”->19) 用+=来增加多个关系
score -=”xlucas” 移除某一个键
迭代遍历
for((k,v)<-score) println(v,k)
for(v<-score.values) println(v)
案例
package cn.xlucas.day4
object TupleDemo1 {
def main(args:Array[String]){
val scores=Map("Alice"->10,"Bob"->3,"Cindy"->8)
var score=scala.collection.mutable.Map("Alice"->10,"Bob"->3,"Cindy"->8)
val scoress=new scala.collection.mutable.HashMap[String,Int]
println(scores)
//获取到映射中的值
val bobsScore=scores("Bob")
println(bobsScore)
//如果用上面的方法会存在一个问题,如果请求中没有这个键,那么就会抛出异常
//所以我们应该这么写
val bobs=if (scores.contains("Bob")) scores("Bob") else 0
println(bobs)
//简介的写法是
val bob=scores.getOrElse("Bob", 0)
println(bob)
score("Bob")=10
score("Fred")=9
score +=("xlucas"->20,"xulu"->19)
score -="xlucas"
println(score)
for((k,v)<-score) println(v,k)
for(v<-score.values) println(v)
}
}
结果
Map(Alice -> 10, Bob -> 3, Cindy -> 8)
3
3
3
Map(Bob -> 10, Fred -> 9, Alice -> 10, xulu -> 19, Cindy -> 8)
(10,Bob)
(9,Fred)
(10,Alice)
(19,xulu)
(8,Cindy)
10
9
10
19
8
2、元组
(1)在元组当中可以存放很多个数据,元组中数据的访问是从下标1开始的.
(2)元组是很重要的,因为对于一个函数或算子来说,有可能会返回几个值,我们常用tuple中定义的几个变量来接受 函数返回的数值。
案例
package cn.xlucas.day4
object TupleDemo2 {
def main(args:Array[String]){
val tripe = ("Spark","Hadoop",88.8,20)
println(tripe._1) //对于元组来说,数据的访问是从下标1开始的
println(tripe._2)
println(tripe._3)
println(tripe._4)
var a@b = "Spark" //a是b的别名
println(a+"\t"+b)
a = "Hadoop"
println(a+"\t"+b)
val (c,d) = (100,"Spark")
println(c+"\t"+d)
val Array(e,f) = Array(100,300)
println(e+"\t"+f)
}
}
结果
Spark
Hadoop
88.8
20
Spark Spark
Hadoop Spark
100 Spark
100 300