Map(映射)是一種可迭代的鍵值對集合,在scala中使用映射非常簡單,
構造Map
//inmutable Map(不可變映射,值不可變)
// 具有初始值
// 在scala中->運算子是用來創建鍵值對元組的,
val inmutableMap = Map(("yoleen" -> 20), ("hq", 26))
// 不具有初始值,不建議對不可變Map這樣構建,不可變映射添加資料都回傳一個新的映射,
val stringToInt = new scala.collection.immutable.HashMap[String, Int]
//mutable Map(可變映射,增加、洗掉、更新元素回傳自身)
val mutableMap: mutable.Map[String, Int] = scala.collection.mutable.Map(("yoleen" -> 20), ("hq", 26))
//不具有初始值
val stringToInt = new scala.collection.mutable.HashMap[String, Int]
//有初始值的可以不用new
獲取映射中的值
val mutableMap: mutable.Map[String, Int] = scala.collection.mutable.Map(("yoleen" -> 20), ("hq", 26))
val v: Option[Int] = mutableMap.get("yoleen") //如果key存在回傳的是some物件,對結果進行了封裝,不存在回傳的是None
val v1: Int = mutableMap("yoleen")// 使用apply方法獲取值,不進行option封裝,
val v2: Int = mutableMap.getOrElse("yoleen", 10)//如果key不存在就回傳默認值
val v3: Int = mutableMap.getOrElseUpdate("yoleen1",op(5,6))//如果key不存在回傳默認值的同時還添加進映射中去,
添加&更新映射中的值
val mutableMap: mutable.Map[String, Int] = scala.collection.mutable.HashMap[String,Int]
mutableMap+=("yoleen"->10)
mutableMap+=("yoletpig"->10,"alex"->20) //添加多個鍵值對
mutableMap++=mutable.Map(("tony" -> 20), ("jskon", 26)) //添加另一個映射中所有鍵值對,
mutableMap.put("kudu",6)//鍵存在則更新值
mutableMap("yoleen") = 20//更新值
mutableMap.transform((s, i) => i * 2)//對每個鍵對應的值進行*2操作
移除鍵值對
mutableMap-="yoleen"
mutableMap-=("yoletpig","jskon") //移除多個鍵值對
val option: Option[Int] = mutableMap.remove("kudu") //移除鍵值對回傳option物件
mutableMap.retain((s,i)=>s.startsWith("y") && i>=10) //只保留鍵已"y"開頭并且值大于等于10的鍵值對
mutableMap.clear()//清除所有鍵值對
迭代映射
for (elem <- mutableMap) {
elem // tuple型別(String,Int)
}
for ((k,v) <- mutableMap) {
//k,v 鍵跟值
}
for (elem <- mutableMap.keySet) {
//elem 就是key
}
for (elem <- mutableMap.values) {
//elem 就是value
}
其他映射
除了常用的HashMap之外,還有SortMap,LinkedHashMap,TreeMap等等,
- SortMap 按照順序依次訪問映射中的鍵,
- LinkedHashMap 按照插入順序訪問,
- TreeMap 按鍵排序,
如需與java互操作,加入隱式轉換就行,
import scala.collection.JavaConversions.mapAsScalaMap
元組(Tuple)
元組的值是通過將單個的值包含在()中構成,例如:
(1,3.14,"hello") //型別不限
val t = (1,3.14,"hello")
//我們可以通過._1 ._2來訪問元組中的元素
val a = t._1 // 1
val b = t._2 // 3.14
//注意,元組下標是從1開始,
//我們可以使用模式匹配獲取元組中的值,
val (first,_,third) = t
// first=1,third="hello"
元組的拉鏈操作
val sy = Array("<","-",">")
val cnt = Array(2,3,2)
val pairs = sy.zip(cnt) //Array(("<",2),("-",3),(">",2))
for((s,n)<-pairs) print(s*n) // <<--->>
碼字不易,喜歡的麻煩點下推薦,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/414.html
標籤:Scala
