映射其實就是Map,Scala中映射分爲可變映射和不可變映射。java
不可變映射其值不能改變,構造方式以下:數組
從上面咱們能夠看到,當咱們嘗試去改變不可變映射的值時,報錯了。而且這裏注意看下咱們的Map是 scala.collection.immutable.Map[String,Int] 注意immutable包,他表示不可變,這裏能夠與後續的可變映射的包名做對比函數
若是你須要構造一個可變映射,請這樣作:使用 scala.collection.mutable.Mapspa
若是你想從一個空的映射開始,你須要選定一個映射實現並給出類型參數:scala
在Scala中映射是對偶的集合。對偶簡單地說就是兩個值構成的組,這兩個值並不必定是同一個類型,好比("HYC",10)。對象
-> 操做符用來建立對偶 "HYC" -> 10 產出的代碼是("HYC",10),所以我麼你徹底能夠這樣來定義映射:排序
獲取值得方法前面咱們已經使用了ip
咱們使用()來獲取值,和數組很像,可是數組()當中是座標,映射當中()是key。io
--------------------------------------table
要檢查映射中是否有某個指定的鍵,能夠用contains方法
因爲這樣的組合十分廣泛,所以Scala中提供了一個快捷方法:
更新映射中的值,相似於賦值的操做,map變量是一個可變映射
針對已經有的值,會採用覆蓋更新操做。
針對沒有的值,會從新生成一個映射
若是咱們想要在映射中添加多個關係,能夠用+=操做:
對應的,移除某個鍵對應的值,能夠用-=操做:
--------------------------------------
你不可能更新一個不可變映射,但你能夠經過其餘方式獲取相同的操做——獲取一個包含所須要的更新的新映射:
而且這種操做會將重複的映射進行更新。
同理,咱們也能夠更新var變量
要從不可變映射中移除某個鍵,你能夠用 - 操做符
總結:可變映射用 +=、-=。不可變映射用+、-。爲何不可變不能用+=、-=?由於+=、-=不會生成新的映射,實在原來的映射中改變,所以不可變映射不能用+=、-=。而可變數組不能用+、-麼?實際上是能夠的,可是經過+、-操做後會生成新的映射,這對於可變數組來講有些多此一舉,可是對於不可變映射來講讓它有課能夠「改變」的可能。
以下這段超簡單的循環便可遍歷映射中的全部鍵/值對偶
for ( (k , v) <- 映射 ) 處理k和v
若是要反轉一個映射——交換鍵和值得位置,能夠用
for ( (k , v) <- 映射 ) yield (v , k)
若是處於某種緣由,咱們只須要訪問鍵或值,向Java同樣,則能夠用keySet和values方法。
keySet方法返回一個Set集合
values方法返回一個Iterable
注:在Scala中咱們把(k,v)叫作一個元組,映射不過是2維的元組的集合
在操做映射時,咱們須要一個選定的實現:哈希表或者平衡樹。默認狀況下,Scala給的是哈希表。哈希表沒有對鍵進行排序,而且仍是亂序,若是咱們須要有序的映射,咱們須要實現一個樹形映射:
SortedMap是一個樹形的映射,所以是有序的,而且他是一個可變映射(老版本是不可變的)
若是要安插入順序訪問全部的鍵,可使用LinkedHashMap:
Scala映射與Java映射之間的轉換:
1.Java映射轉Scala映射:
須要添加以下引用
import scala.collection.JavaConversions.mapAsScalaMap
2.Scala映射轉Java映射:
須要添加以下引用
import scala.collection.JavaConversions.mapAsJavaMap
映射是鍵/值對偶的集合。對偶是元組(tuple)的最簡單形態,元組是不一樣類型的值得彙集。
注:對偶是二元元組的叫法。
元組的值是經過將單個的值包含在圓括號中構成。例如:
(1, 3.14, "Fred")
它是一個元組,類型爲:
Tuple3[Int, Double, java.lang.String] 也能夠寫爲 (Int, Double, java.lang.String)
因而可知,元組最多支持22元
--------------------------------------
元組如何訪問?好比有以下元組:
val t = (1, 3.14, "Fred")
你就能夠用方法_一、_二、_3訪問其元組:
說明:你能夠把t._2 寫爲t 2(用空格而不是句點),但不能寫成t_2。
--------------------------------------
咱們還能夠用元組來做爲承接變量或者函數返回值,好比:
將咱們以前定義的元組 t 賦值給一個新的元組對象,遠足中定義的各個部件將都會被賦值
有時咱們並不須要全部的部件,此時咱們能夠將不須要的位置上用 _ 表示。
注:元組中定義的部件都是常量val。
有時咱們的韓式須要返回不僅一個值的狀況。此時咱們能夠用元組做爲函數的返回值類型。
使用元組的緣由之一是把多個值綁定在一塊兒,以便他們可以一塊兒被處理,一般能夠用數組的zip方法完成。例如:
上面的例子太完美了,有可能兩個數組不同長,這時:
咱們能夠看到zip操做是安位置對應匹配的,匹配不到的就丟棄了。
--------------------------------------
toMap方法能夠將對偶的集合轉換成映射