1. 程式人生 > >scala:元組和對映

scala:元組和對映

元組:

元祖即n個物件的聚集。

scala> (1, 2.0, "a", 'b')
res131: (Int, Double, String, Char) = (1,2.0,a,b)  
//型別也可寫為Tuple4[Int, Double, String, Char]

訪問元組的元素,從1開始而不是0:

res131._1
res131 _4

用模式匹配訪問元組各個元素:

scala> val (e1, e2, _, _) = res131
e1: Int = 1
e2: Double = 2.0

元組可用於函式返回值,可以返回多個值。

對偶:

n=2的元組

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

scala> val t2 = ('b', 2)
t2: (Char, Int) = (b,2)

對映

對偶的集合

scala> val score = Map(t1, t2) //不可變對映
score: scala.collection.immutable.Map[Any,Int] = Map(a -> 1, b -> 2)

scala> import scala.collection.mutable.Map  //可變對映
import scala.collection.mutable.Map scala> Map(t1,t2) res98: scala.collection.mutable.Map[Any,Int] = Map(b -> 2, a -> 1)

查詢對映中的值

score("a") //相當於java中map.get("a"),但是若不存在對映則丟擲NoSuchElementException異常
score.getOrElse('c',1) //若不存在對映則賦值1

scala> score.get("b")
res104: Option[Int] = None

scala>
score.get("a") res105: Option[Int] = Some(1)

修改對映
只有可變對映才可以改變裡面對偶的值:

res98("a") = 10  //修改或增加值
res98 += ("c" -> 3, "d" -> 4) //修改或增加多個值
res98 -= "d" //移除對偶

對不可變的對映,可以在其基礎上做出修改建立新的對映

val newScore1 = score + ("a" -> 7, "e" -> 9)
val newScore2 = score - ("a", "e")

遍歷對映

for((k,v) <- score) 處理k和v...

scala預設對映是雜湊表對映,還有按鍵順序排列的SortedMap和按照插入順序訪問的LinkedHashMap

import scala.collection.immutable.SortedMap
import scala.collection.mutable.LinkedHashMap

zip操作

scala> Array("a", "b", "c").zip(Array(0, 9, 8))
res137: Array[(String, Int)] = Array((a,0), (b,9), (c,8))

scala> res137.toMap
res138: scala.collection.immutable.Map[String,Int] = Map(a -> 0, b -> 9, c -> 8)