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))