一塊兒學scala--Map&Tuple

Map(映射)是一種可迭代的鍵值對集合。在scala中使用映射很是簡單。java

構造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等等。app

  • SortMap 按照順序依次訪問映射中的鍵。
  • LinkedHashMap 按照插入順序訪問。
  • TreeMap 按鍵排序。
    如需與java互操做,加入隱式轉換就行。
import scala.collection.JavaConversions.mapAsScalaMap

元組(Tuple)

元組的值是經過將單個的值包含在()中構成。例如:scala

(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) // <<--->>

碼字不易,喜歡的麻煩點下推薦。

相關文章
相關標籤/搜索