第五章 映射、

1 定义映射

scala> val m1=Map("hadoop"->10,"java"->20)

m1: scala.collection.immutable.Map[String,Int] = Map(hadoop -> 10, java -> 20)

scala> val m2=Map(("java",100),("oracle",20))
m2: scala.collection.immutable.Map[String,Int] = Map(java -> 100, oracle -> 20)

按key获取值
scala> val v1=m1("java")
v1: Int = 20

默认映射不能修改,可以导入可变类型
scala> import scala.collection.mutable._
import scala.collection.mutable._

这个声明的Map可以被修改
scala> val m3=Map("java"->10,"oracle"->20)
m3: scala.collection.mutable.Map[String,Int] = Map(oracle -> 20, java -> 10)

赋值
scala> m3("java")=60


scala> m3
res25: scala.collection.mutable.Map[String,Int] = Map(oracle -> 20, java -> 60)

注意,通过key直接获取值时,如果key不存在,则系统报错,可以使用getOrElse方法提供默认值
scala> val v2=m3.getOrElse("c#",80)

v2: Int = 80

2 元组

定义元组

scala> val x1=("ok","aa",8.5)

x1: (String, String, Double) = (ok,aa,8.5)

定义元组
scala> val x2=("ok",100L,("spark",8,6))
x2: (String, Long, (String, Int, Int)) = (ok,100,(spark,8,6))

按下标获取值,注意下标从1开始
scala> val v1=x2._1
v1: String = ok


scala> val v1=x2._3
v1: (String, Int, Int) = (spark,8,6)


scala> val v1=x2._3._3
v1: Int = 6

定义多个变量分解赋值
scala> val x2,(a,b,c)=("ok",100L,("spark",8,6))
x2: (String, Long, (String, Int, Int)) = (ok,100,(spark,8,6))
a: String = ok
b: Long = 100
c: (String, Int, Int) = (spark,8,6)

数组转换成Map,注意数组内的元素应形成Key,value形式
scala> val arr=Array(("aa",10,3.5),("bb",5))
arr: Array[Product with Serializable] = Array((aa,10,3.5), (bb,5))


scala> val m1=arr.toMap
<console>:12: error: Cannot prove that Product with Serializable <:< (T, U).
       val m1=arr.toMap
                  ^

这个时正确的
scala> val arr=Array(("aa",1.5),("bb",5))
arr: Array[(String, AnyVal)] = Array((aa,1.5), (bb,5))


scala> val m1=arr.toMap
m1: scala.collection.immutable.Map[String,AnyVal] = Map(aa -> 1.5, bb -> 5)


scala> val arr=Array("aa","bb","cc")
arr: Array[String] = Array(aa, bb, cc)


scala> val arr2=Array(10,35,20)
arr2: Array[Int] = Array(10, 35, 20)

使用zip函数进行拉链操作,将两个数组合并成新的数组
scala> var arr3=arr zip arr2
arr3: Array[(String, Int)] = Array((aa,10), (bb,35), (cc,20))

scala> var arr4=arr2 zip arr
arr4: Array[(Int, String)] = Array((10,aa), (35,bb), (20,cc))

scala> var arr5=arr2.zip(arr)
arr5: Array[(Int, String)] = Array((10,aa), (35,bb), (20,cc))

猜你喜欢

转载自blog.csdn.net/wshsdm/article/details/80378999