Scala中的map测试

43 阅读2分钟

使用scala编程,完成如下功能。

  1. 创建一个可变 Map,用于存储图书馆中的书籍信息(键为书籍编号,值为包含书籍名称、作者、库存数量的元组),初始化为包含几本你喜欢的书籍信息。
  2. 使用 += 操作符添加两本新的书籍到图书馆集合中。
  3. 根据书籍编号查询某一本特定的书籍信息,使用 get 方法,并输出结果。
  4. 修改某本书籍的库存数量(假设可以通过键找到对应的元组并修改其中的值,这里体现可变 Map 的特性)。
  5. 使用 -= 操作符从图书馆集合中删除一本书。
  6. 遍历图书馆书籍 Map,并打印出每本书的信息。

代码:

package map

import scala.collection.mutable.Map  // 导入可变Map

object test {
  def main(args: Array[String]): Unit = {
    // 1. 创建可变Map并初始化书籍信息(键:书籍编号,值:(书名, 作者, 库存数量))
    val library: Map[String, (String, String, Int)] = Map(
      "B001" -> ("《 Scala编程实战 》", "Martin Odersky", 15),
      "B002" -> ("《 深入理解Java虚拟机 》", "周志明", 20),
      "B003" -> ("《 算法图解 》", "Aditya Bhargava", 12)
    )
    println("=== 初始化后的图书馆书籍 ===")
    printLibrary(library)  // 调用自定义打印方法

    // 2. 使用 += 操作符添加两本新书
    library += "B004" -> ("《 数据结构与算法分析 》", "Mark Allen Weiss", 8)
    library += "B005" -> ("《 设计模式:可复用面向对象软件的基础 》", "Erich Gamma", 10)
    println("\n=== 添加两本新书后 ===")
    printLibrary(library)

    // 3. 根据书籍编号查询(使用get方法,返回Option类型,避免空指针)
    val targetBookId = "B002"
    val bookInfo = library.get(targetBookId)
    println(s"\n=== 查询书籍编号 $targetBookId 的结果 ===")
    bookInfo match {
      case Some((name, author, stock)) =>
        println(s"找到书籍:书名:$name,作者:$author,库存:$stock")
      case None => println(s"未找到编号为 $targetBookId 的书籍")
    }

    // 4. 修改某本书的库存数量(可变Map特性:通过键获取元组后重新赋值)
    val updateBookId = "B001"
    library.get(updateBookId) match {
      case Some((name, author, oldStock)) =>
        val newStock = oldStock + 5  // 库存增加5本
        library(updateBookId) = (name, author, newStock)  // 重新赋值修改库存
        println(s"\n=== 修改书籍编号 $updateBookId 的库存 ===")
        println(s"原库存:$oldStock → 新库存:$newStock")
      case None => println(s"未找到编号为 $updateBookId 的书籍,无法修改库存")
    }

    // 5. 使用 -= 操作符删除一本书
    val deleteBookId = "B003"
    library -= deleteBookId
    println(s"\n=== 删除书籍编号 $deleteBookId 后 ===")
    printLibrary(library)

    // 6. 遍历Map并打印所有书籍信息(两种遍历方式可选)
    println("\n=== 最终图书馆所有书籍信息(遍历方式1) ===")
    for ((bookId, (name, author, stock)) <- library) {
      println(f"书籍编号:$bookId,书名:$name,作者:$author,库存:$stock 本")
    }

    println("\n=== 最终图书馆所有书籍信息(遍历方式2) ===")
    library.foreach { case (bookId, (name, author, stock)) =>
      println(f"书籍编号:$bookId,书名:$name,作者:$author,库存:$stock 本")
    }
  }

  // 辅助方法:打印图书馆书籍信息
  def printLibrary(library: Map[String, (String, String, Int)]): Unit = {
    if (library.isEmpty) {
      println("图书馆暂无书籍")
    } else {
      library.foreach { case (id, (name, author, stock)) =>
        println(f"编号:$id → 书名:$name,作者:$author,库存:$stock")
      }
    }
  }
}

结果:

屏幕截图 2025-12-01 100723.png