Map映射

0 阅读2分钟

在我们生活中,常常需要将一些相关的信息关联起来存储和查询,比如学 生姓名和对应的学号、城市名称和其所在的省份等。在编程中,Scala 为我们提供了一种非常实用的数据结构来处理这种关联关系,那就是 Map。现在我们来学习Map

一,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,...)

映射一一对应关系

package map
/*
*
* Map,映射。表示一种一一对应关系
* 
 */
object map01 {
  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.mutable.Map("42" -> "湖北")
    // provinnceInfo += ("14" -> "山西")
    val newInfo = provinceInfo + ("14" -> "山西")
    println(newInfo)
  }
}

5.png

二,Map的常用方法

1,添加

对于可变 Map,我们可以使用 += 操作符或者 put 方法来添加键值对。

添加元素到可变 Map 的格式(+= 操作符):mapName += (key -> value)
添加元素到可变 Map 的格式(put 方法):mapName.put(key, value)

2,删除

对于可变 Map,我们可以使用 -= 操作符或者 remove 方法来删除键值对。
删除可变 Map 元素的格式(-= 操作符): mapName -= key
删除可变 Map 元素的格式(remove 方法): mapName.remove(key)

3,查询,对应的值

我们可以使用 get 方法来查询 Map 中的值,或者直接Map(key)。

查询 Map 元素的格式(get 方法):

val valueOption: Option[ValueType] = mapName.get(key)

4,遍历

我们可以使用 for 循环或者 foreach 方法来遍历 Map。

使用 for 循环遍历 Map 的格式:

for ((key, value) <- mapName) {   // 操作,如打印 key 和 value }

使用 foreach 方法遍历 Map 的格式:

mapName.foreach { case (key, value) =>   // 操作,如打印 key 和 value }

// 使用 for 循环遍历

for ((name, score) <- studentScores1) { println(s"name:name: score") }

// 使用 foreach 方法遍历

studentScores2.foreach { case (name, score) => println(s"name:name: score") }

package map

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

   // 2,删除 allice 删除操作是根据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 ((key,value) <- scores){
      println(s"${key},${value}分")
    }

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

输出结果:

6.png