Scala學習八:Map, Tuple

Scala學習八:Map, Tuple


Map集合

Scala中的集合 一般情況 下都分爲 可變集合不可變集合

  • 可變集合: scala.collection.mutable._ 可以改變集合的大小及元素內容。對集合的修改操作都是在原集合上進行的。

  • 不可變集合:scala.collection.immutable._ 不能改變集合大小及元素內容。對集合的修改操作都會生成一個新的數據集。

  • 集合中的元素都是對偶,或者說都是 二元元組

  • 常用的集合操作:

    // 獲取一個Key的Set集合
    val keys = map.keySet
    // 獲取一個Iterable集合
    val valItr = map.values
    val isEmpty = map.isEmpty

Scala 不可變集合

import scala.collection.immutable.{HashMap,Map}
    println("------- Map [init] ")
    // 通過初始值構造
    val m = Map(("a"->1),("b",2))

    // 構造一個空集合
    val map = new HashMap[String, Int]
    // 有2種方式向集合中的添加元素
    map.+(("a", 1))
    map.+(("b" -> 2))

    // 數據爲空,因爲每次操作都產生新的數據集合
    println(" map.get(a) = " + map.get("a"))
    println(" map.get(b) = " + map.get("b"))

    // get 操作產生一個Option對象,並不是真正的Key值,當未找到Key時,返回None
    println(" map.get(c) = " + map.get("c"))

    // 直接獲取Key所對應的值,未找到Key時,返回 NoSuchElementException 異常
    println(" map.get(c) = " + map("c"))

    // 當不確定元素是否在在集合中時,可以通過getOrElse來賦於默認值,防止程序出現異常
    println(" map.getOrElse = " + map.getOrElse("c",0))
    println(" map.all = " + map)

Scala 可變集合

import scala.collection.mutable.{HashMap,Map}
    println("------- Map [init] ")
    // 通過初始值構造
    val m = Map(("a"->1),("b",2))

    // 構造一個空集合
    val map = new HashMap[String, Int]
    // 有2種方式向集合中的添加元素
    // 注意方法調用不一樣,不可變集合的map沒有 += 方法
    map.+=(("a", 1))
    map.+=(("b" -> 2))

    // 數據爲空,因爲每次操作都產生新的數據集合
    println(" map.get(a) = " + map.get("a"))
    println(" map.get(b) = " + map.get("b"))


    // get 操作產生一個Option對象,並不是真正的Key值,當未找到Key時,返回None
    println(" map.get(c) = " + map.get("c"))

    // 直接獲取Key所對應的值,未找到Key時,返回 NoSuchElementException 異常
    println(" map.get(c) = " + map("c"))

    // 當不確定元素是否在在集合中時,可以通過getOrElse來賦於默認值,防止程序出現異常
    println(" map.getOrElse = " + map.getOrElse("c",0))
    println(" map.all = " + map)

Scala中的Map集合迭代非常方便,因爲你可以使用模式匹配。

    對集合的迭代在
    for ((k, v) <- map) {
      println("key = " + k + ", value = " + v)
    }

Tuple元組


元組是不同類型的值的集合。集合中的鍵-值映射是元組的最簡單形式。元組是將多個值用逗號分隔,並通過 “小括號()” 包含形成的。
  • 通過IDE提示看到元組最大支持到22位。

  • 可以通過 “_.N” 來訪問 元組中的值,與其他集合不同,元組下標從 1 開始。也可以寫成 “t空格_2”,但不能寫能 “t_2”

  • 將元組中的值反解時,可以通過模式匹配將 元組中多個值賦於 變量,如果只需要 前N個,後面用 “(下劃線)_” 省略。

    println("------- Tuple [init] ")
    val tupA = ("a", 1)
    val tupB = ("b" -> 2)
    val tupC = "c" -> 3
    val tupD = new Tuple3[String, String, String]("a", "b", "c")

    // 元組中的值下標從1開始
    println(" tupD._3 = " + tupD._3)

    // 反解元組中的值,可以用模式匹配
    // _ 表示省略後面的值
    val (first, second ,_) = tupD
    println(" first = " + first)
    println(" second = " + second)

    // zip方法可以將 相同個數的 集合轉換成對偶集合
    val keys = Array("a","b","c")
    val values = Array(1,2,3)

    // pairs 類型是 Array((String,Int))
    val pairs = keys.zip(values)
    println(" pairs = " + pairs.mkString("\t"))

    // toMap 方法 可以將對偶集合轉換成 Map
    // 注意:isInstanceOf[Class] 中的 Class 中的泛型信息別丟掉,可能會報錯 
    val map = pairs.toMap
    println(" is Map = " + map.isInstanceOf[scala.collection.immutable.Map[String,Int]])
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章