scala映射和元组

scala映射,是一对键值对,相当于java中的Map

对偶:由两个值构成的组,形式 : 值1->值2,值1和值2类型不一定要相同,可以理解为对偶就是一个key/value

映射就是对偶的集合

示例:

val socres2= scala.collection.immutable.Map("Alice"->3,"Bob"->10,"Imok"->8) // 不可修改的映射

 

val socres= scala.collection.mutable.Map("Alice"->3,"Bob"->10,"Imok"->8) //可修改映射

创建一个空值的映射,需要选定一个映射的实现并给出类型参数

val socres = scala.collection.mutable.HashMap[String.Int]

 映射的另一种表示方法

val scores = Map(("Alice",10),("Bob",10),("Imok,8"))

 

 映射基本操作

1、取值

val v = socres("Alice") // 等价于 val v = socres.get("Alice").get 
映射的get方法返回的是一个Option类对象,要么是Some,要么是None

 

val v = if(socres.contains("Bob")) socres("Bob") else 0 // 等价于 val v = socres.getOrElse("Bob",0)

 

2、更新、添加、删除

socres("Alice") = 19 //更新

socres+=("Fred"->7,"Tom"-> 16) //添加多个

socres-="Alice" //删除

 

3、不可变的映射虽然不能去修改,但是可以在其基础上做一些操作构建一个新的映射

val socres2= scala.collection.immutable.Map("Alice"->3,"Bob"->10,"Imok"->8) // 不可修改的映射
val score3 = scores2 + ("Tom"->7,"Bob"->6) //Tom->7 添加了,"Bob"->6更新了

val score3 = scores2 - "Alice" //去掉 "Alice" 的新的映射

4、迭代映射

  //迭代映射
  for((k,v) <- socres)
    println(k + ":" + v)
    
  //迭代键值k
  for(k <- socres.keySet)
    println(k + ":" + socres(k))
  
  //迭代值 v
  for(v <- socres.values)
    println(v)

 

5、反转映射

for((k,v) <- socres) yield (v,k) //键值交换

 

6、 有序映射

SortedMap、LinkedHashMap

 

元组

元组是不同类型的值的聚集,对偶是元组的最简单的实现

val t = (1,3.14,"Fred")

var second = t._2 //通过_1 _2 _3访问组元 ,另外一种表示方法 t _2


     

 

使用模式匹配获取组元
  val t = (1,3.14,"Fred")
  val (first,second,third) = t
  println(first) //1
  println(second) //3.14
  println(third) //Fred

 

拉链操作

有一个键的集合,以及与之平行的值的集合,可以用拉链操作(zip方法)将它们组成一个映射 

  val symbools = Array("<","-",">")
  val counts = Array(2,10,2)
  val pairs = symbools.zip(counts) //构成对偶数组 Array((<,2)(-,10)(>,2)),可以同步toMap方法将对偶集合转换成映射
   
  for(i <- 0 until pairs.length)
      print(pairs(i)) // 
   
  for((s,n) <- pairs) print(s*n)

 

posted @ 2018-10-15 15:28  v-imok  阅读(225)  评论(0编辑  收藏  举报