Map 实训1

45 阅读2分钟

Map实训内容

  1. 创建一个可变 Map,用于存储图书馆中的书籍信息(键为书籍编号,值为包含书籍名称、作者、库存数量的元组),初始化为包含几本你喜欢的书籍信息。

  2. 使用 += 操作符添加两本新的书籍到图书馆集合中。

  3. 根据书籍编号查询某一本特定的书籍信息,使用 get 方法,并输出结果。

  4. 修改某本书籍的库存数量(假设可以通过键找到对应的元组并修改其中的值,这里体现可变 Map 的特性)。

  5. 使用 -= 操作符从图书馆集合中删除一本书。

  6. 遍历图书馆书籍 Map,并打印出每本书的信息。

import scala.collection.mutable

object map03 {
  def main(args: Array[String]): Unit = {
    // 1. 创建可变Map,键为书籍编号(String),值为元组(书名, 作者, 库存)
    val library: mutable.Map[String, (String, String, Int)] = mutable.Map(
      "B001" -> ("《Scala编程实战》", "马丁·奥德斯基", 15),
      "B002" -> ("《深入理解Java虚拟机》", "周志明", 20),
      "B003" -> ("《Python编程:从入门到实践》", "埃里克·马瑟斯", 18)
    )
    println("=== 初始图书馆书籍信息 ===")
    printLibrary(library) // 调用遍历方法打印

    // 2. 使用 += 操作符添加两本新书
    library += "B004" -> ("《数据结构与算法分析》", "马克·艾伦·维斯", 12)
    library += "B005" -> ("《MySQL必知必会》", "本·福达", 25)
    println("\n=== 添加两本新书后 ===")
    printLibrary(library)

    // 3. 根据书籍编号查询(使用get方法,返回Option类型,避免空指针)
    val targetBookId = "B003"
    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. 修改某本书的库存数量(元组不可变,通过替换整个元组实现更新)
    val updateBookId = "B002"
    library.get(updateBookId) match {
      case Some((name, author, oldStock)) =>
        val newStock = oldStock + 5 // 假设库存增加5本
        library.update(updateBookId, (name, author, newStock)) // 替换元组
        println(s"\n=== 书籍编号 $updateBookId 库存更新 ===")
        println(s"原库存:$oldStock → 新库存:$newStock")
      case None => println(s"未找到编号为 $updateBookId 的书籍,无法更新库存")
    }

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

    // 6. 遍历Map并打印所有书籍信息(复用printLibrary方法)
    println("\n=== 最终图书馆所有书籍信息(遍历输出) ===")
    printLibrary(library)
  }

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

结果如下:

屏幕截图 2025-11-25 113539.png