scala:元組和對映
阿新 • • 發佈:2018-12-29
元組:
元祖即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)