Scala中Map映射

35 阅读1分钟

(一)Map 的定义和创建

假设我们要创建一个存储学生姓名和成绩的信息表,应该怎么用 Map 实现 呢?

Map是一种存储键值对的数据结构,每个键在 Map 中是唯一的。在 Scala 中,我们可以使用多种方式创建 Map。

Map 创建格式:

1.不可变 Map:val mapName: Map[KeyType, ValueType] = Map(key1 -> value1, key2 -> value2,...)

2.可变 Map(需导入scala.collection.mutable.Map):val mapName: mutable.Map[KeyType, ValueType] = mutable.Map(key1 -> value2,...)

  • 只有 “添加、删除” 有区别:可变 Map 直接改原数据,不可变 Map 不碰原数据、只返回新 Map;
  • “查询、遍历” 两者用法完全一样;
  • Map 里的键是唯一的,不会有重复的键。
package map

/*
* Map映射,表示一种一一对应关系!
* 
* */
object R03 {
  def main(args: Array[String]): Unit = {
    // 创建可变的Map    键 值 对
    val scores = scala.collection.mutable.Map("alice" -> 90, "bob" -> 85)
    // 添加
    scores += ("max" -> 100)

    println(scores)

    // 创建不可变的Map
    val provinceInfo = scala.collection.immutable.Map("42" -> "湖北")
    // provinceInfo += ("14" -> "山西")
    val newInfo = provinceInfo + ("14" -> "山西")
    println(newInfo)
  }
}

image.png

(二)添加元素、删除元素、查询元素、遍历

package map

/*
* Map,映射,表示一种一一对应关系!
*
* 1.添加
* 2.删除
* 3.查询,对应的值
* 4.遍历。  可以使用 for 循环或者 foreach 方法来遍历 Map
*
* */
object map02 {
  def main(args: Array[String]): Unit = {
    // 创建可变的Map    键 值 对
    val scores = scala.collection.mutable.Map("alice" -> 90, "bob" -> 85)
    // 1.添加
    scores += ("max" -> 100)

    // 2.删除 alice。 删除操作是根据key来做的
    scores -= "alice"

    // 3.查询。 查看bob的分数。 rst是一个Option类型
    val rst = scores.get("bob1")
    if(rst.isEmpty){
      println("bob1没有成绩")
    } else {
      println(rst.get)
    }

    // 4. 打印scores
    println(scores)
    // for
    for ((key,value) <- scores) {
      println(s"${key}, ${value}分")
    }

    // foreach
    scores.foreach({
      case (key,value) => println(s"${key}, ${value}分")
    })
  }
}

image.png