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]])
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章