map编程练习题

44 阅读2分钟
package map

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

object LibraryMapDemo {
  def main(args: Array[String]): Unit = {
    // 1. 创建可变 Map,初始化为包含几本喜欢的书籍信息
    val library: Map[Int, (String, String, Int)] = Map(
      1 -> ("《活着》", "余华", 50),
      2 -> ("《百年孤独》", "加西亚·马尔克斯", 30),
      3 -> ("《追风筝的人》", "卡勒德·胡赛尼", 45)
    )
    
    println("初始图书馆书籍信息:")
    library.foreach { case (id, (title, author, stock)) =>
      println(s"编号:$id,书名:$title,作者:$author,库存:$stock")
    }
    println()
    
    // 2. 使用 += 操作符添加两本新的书籍
    library += 4 -> ("《小王子》", "安托万·德·圣-埃克苏佩里", 60)
    library += 5 -> ("《哈利·波特与魔法石》", "J.K.罗琳", 75)
    
    println("添加两本新书后:")
    library.foreach { case (id, (title, author, stock)) =>
      println(s"编号:$id,书名:$title,作者:$author,库存:$stock")
    }
    println()
    
    // 3. 根据书籍编号查询特定书籍信息,使用 get 方法
    val bookIdToFind = 2
    val bookInfo = library.get(bookIdToFind)
    println(s"查询编号为 $bookIdToFind 的书籍:")
    bookInfo match {
      case Some((title, author, stock)) => 
        println(s"找到书籍:编号:$bookIdToFind,书名:$title,作者:$author,库存:$stock")
      case None => 
        println(s"未找到编号为 $bookIdToFind 的书籍")
    }
    println()
    
    // 4. 修改某本书籍的库存数量
    val bookIdToUpdate = 1
    library.get(bookIdToUpdate) match {
      case Some((title, author, oldStock)) =>
        val newStock = oldStock + 20 // 假设增加20本库存
        library += bookIdToUpdate -> (title, author, newStock)
        println(s"更新编号为 $bookIdToUpdate 的书籍库存:从 $oldStock 变为 $newStock")
      case None =>
        println(s"未找到编号为 $bookIdToUpdate 的书籍,无法更新库存")
    }
    println()
    
    // 5. 使用 -= 操作符删除一本书
    val bookIdToDelete = 3
    library -= bookIdToDelete
    println(s"删除编号为 $bookIdToDelete 的书籍后:")
    library.foreach { case (id, (title, author, stock)) =>
      println(s"编号:$id,书名:$title,作者:$author,库存:$stock")
    }
    println()
    
    // 6. 遍历图书馆书籍 Map,打印每本书的信息
    println("最终图书馆书籍信息:")
    for ((id, (title, author, stock)) <- library) {
      println(f"书籍信息:编号=$id%2d,书名=$title%-25s,作者=$author%-20s,库存=$stock%3d")
    }
  }
}