scala的Map例题

34 阅读2分钟

Map例题题目

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

例题代码

//在每一个scala的文件中,它都会自动导入一些包
import scala.collection.mutable

object exercise {
  def main(args: Array[String]): Unit = {
    // 第一题:创建可变Map,键为书籍编号,值为(书籍名称, 作者, 库存数量)的元组
    val library = mutable.Map[Int, (String, String, Int)](
      1 -> ("水浒传", "施耐庵", 10),
      2 -> ("三国演义", "罗贯中", 9)
    )
    println("===== 初始化后的图书馆书籍信息 =====")
    println(library)

    // 第二题:使用 += 操作符添加两本新书籍
    // 注意:添加多个键值对时,需用括号包裹为一个整体
    library += (3 -> ("西游记", "吴承恩", 11), 4 -> ("红楼梦", "曹雪芹", 12))
    println("\n===== 添加两本新书后的书籍信息 =====")
    println(library)

    // 第三题:根据书籍编号查询信息,使用get方法(返回Option,避免空指针)
    val bookId = 2
    val queriedBook = library.get(bookId)
    println(s"\n===== 查询编号为${bookId}的书籍 =====")
    queriedBook match {
      case Some((name, author, stock)) => println(s"找到书籍:名称=${name},作者=${author},库存=${stock}")
      case None => println(s"未找到编号为${bookId}的书籍")
    }

    // 第四题:修改某本书的库存数量(元组不可变,需重新赋值新元组)
    val bookIdToUpdate = 1
    val newStock = 15
    library.get(bookIdToUpdate) match {
      case Some((name, author, _)) => library.update(bookIdToUpdate, (name, author, newStock))
      case None => println(s"未找到编号为${bookIdToUpdate}的书籍,无法修改库存")
    }
    println(s"\n===== 修改编号为${bookIdToUpdate}的书籍库存为${newStock} =====")
    println(library)

    // 第五题:使用 -= 操作符删除一本书
    val bookIdToDelete = 3
    library -= bookIdToDelete
    println(s"\n===== 删除编号为${bookIdToDelete}的书籍后 =====")
    println(library)

    // 第六题:遍历Map并打印每本书的详细信息
    println("\n===== 遍历图书馆所有书籍信息 =====")
    library.foreach { case (id, (name, author, stock)) =>
      println(s"书籍编号:${id},名称:${name},作者:${author},库存:${stock}")
    }
  }
}