4、map 和 tuple

不可变Map,默认的Map

scala> val map = Map(1 -> "t1",2 -> "t2")
map: scala.collection.immutable.Map[Int,String] = Map(1 -> t1, 2 -> t2)

scala> map.updated(1,"t11")
res26: scala.collection.immutable.Map[Int,String] = Map(1 -> t11, 2 -> t2)

scala> map.updated(3,"t3")
res27: scala.collection.immutable.Map[Int,String] = Map(1 -> t1, 2 -> t2, 3 -> t3)

//可见updated返回新的不可变Map,原map没有改变 scala
> map res28: scala.collection.immutable.Map[Int,String] = Map(1 -> t1, 2 -> t2)
//取值
scala> map(1) res29: String = t1 scala> map(2) res30: String = t2
override def updated[B1 >: String](key: Int,value: B1): scala.collection.immutable.Map[Int,B1]
//B1 >: String  表示B1是String的父类

可变Map,需要导类并指定别名

scala> import scala.collection.mutable.{Map => MMap}
import scala.collection.mutable.{Map=>MMap}

scala> val mmap = MMap((1,"t1"),(2,"t2"))
mmap: scala.collection.mutable.Map[Int,String] = Map(2 -> t2, 1 -> t1)

scala> mmap.updated(1,"t11")
res31: scala.collection.mutable.Map[Int,String] = Map(2 -> t2, 1 -> t11)

scala> mmap.updated(3,"t3")
res32: scala.collection.mutable.Map[Int,String] = Map(2 -> t2, 1 -> t1, 3 -> t3)

//updated不能用于修改原Map scala
> mmap res33: scala.collection.mutable.Map[Int,String] = Map(2 -> t2, 1 -> t1) scala> mmap.update(1,"t11") scala> mmap.update(3,"t3")
//可变Map中update可修改原Map scala
> mmap res36: scala.collection.mutable.Map[Int,String] = Map(2 -> t2, 1 -> t11, 3 -> t3)
//取值
scala> mmap(1) res37: String = t11

Map是对偶的集合,对偶是只有两个元素的元组,对应java Map中Entry

scala> val v1 = 1 -> "t1"
v1: (Int, String) = (1,t1)

scala> val v2 = (2,"t2")
v2: (Int, String) = (2,t2)

contains、getOrElse、+=

scala> map.contains(1)
res53: Boolean = true

scala> map.contains(3)
res55: Boolean = false

scala> val v = map.getOrElse(3,"t3")
v: String = t3

scala> mmap
res59: scala.collection.mutable.Map[Int,String] = Map(2 -> t2, 4 -> t4, 1 -> t11, 3 -> t3)

scala> mmap.+=((5,"t5"))
res60: mmap.type = Map(2 -> t2, 5 -> t5, 4 -> t4, 1 -> t11, 3 -> t3)

有序Map

scala> val m = scala.collection.immutable.SortedMap((4,"t4"),(3,"t3"),(0,"t0"))
m: scala.collection.immutable.SortedMap[Int,String] = Map(0 -> t0, 3 -> t3, 4 -> t4)

tuple

scala> val t = (1,"tom",'a')
t: (Int, String, Char) = (1,tom,a)

scala> t._3
res68: Char = a

zip拉链

scala> val ids = Array(1,2,3)
ids: Array[Int] = Array(1, 2, 3)

scala> val names = Array("t1","t2","t3")
names: Array[String] = Array(t1, t2, t3)

scala> ids.zip
zip   zipAll   zipWithIndex

scala> ids.zip(names)
res62: Array[(Int, String)] = Array((1,t1), (2,t2), (3,t3))

 zipAll全拉链

scala> val arr = Array(1,2,3)
arr: Array[Int] = Array(1, 2, 3)

scala> val arr1 = Array(1,2,3)
arr1: Array[Int] = Array(1, 2, 3)

scala> val arr2 = Array(1,2,3,4)
arr2: Array[Int] = Array(1, 2, 3, 4)

scala> val arr3 = Array(1,2)
arr3: Array[Int] = Array(1, 2)

scala> arr.zipAll(arr1,-1,-2)  //三个参数,arr1被拉数组,-1当arr不够时用-1填充,-2当arr1不够时用-2填充
res4: Array[(Int, Int)]
= Array((1,1), (2,2), (3,3)) scala> arr.zipAll(arr2,-1,-2) res5: Array[(Int, Int)] = Array((1,1), (2,2), (3,3), (-1,4)) scala> arr.zipAll(arr3,-1,-2) res6: Array[(Int, Int)] = Array((1,1), (2,2), (3,-2))
渐变 --> 突变
原文地址:https://www.cnblogs.com/lybpy/p/9726622.html