实训内容

58 阅读3分钟
import scala.collection.mutable

object LibrarySetExercise {
  def main(args: Array[String]): Unit = {
    // 1. 创建可变Set,存储书籍信息
    val library1 = mutable.Set("Java编程思想", "Scala实战", "算法导论", "设计模式")
    println(s"初始图书馆书籍: $library1")

    // 2. 添加两本新书籍
    library1 += "Python从入门到实践"
    library1 += "数据结构与算法"
    println(s"添加新书后: $library1")

    // 3. 删除一本书
    library1 -= "设计模式"
    println(s"删除书籍后: $library1")

    // 4. 检查特定书籍是否存在
    val bookToCheck = "Python从入门到实践"
    val containsBook = library1.contains(bookToCheck)
    println(s"《$bookToCheck》是否在图书馆中: $containsBook")

    // 5. 创建另一个图书馆的书籍集合
    val library2 = mutable.Set("Scala实战", "Python从入门到实践", "C++ Primer", "操作系统原理")
    println(s"第二个图书馆: $library2")

    // 6. 求并集(两个图书馆所有的书籍)
    val unionSet = library1.union(library2)
    println(s"两个图书馆的并集: $unionSet")

    // 7. 求交集(两个图书馆都有的书籍)
    val intersectSet = library1.intersect(library2)
    println(s"两个图书馆的交集: $intersectSet")

    // 8. 求差集(第一个图书馆有,第二个图书馆没有的书籍)
    val diffSet = library1.diff(library2)
    println(s"第一个图书馆相对于第二个的差集: $diffSet")
  }
}
import scala.collection.mutable

object LibraryMapExercise {
  def main(args: Array[String]): Unit = {
    // 1. 创建可变Map,键为书籍编号,值为(书名, 作者, 库存数量)的元组
    val library = mutable.Map(
      "B001" -> ("Java编程思想", "Bruce Eckel", 5),
      "B002" -> ("Scala实战", "Martin Odersky", 3),
      "B003" -> ("算法导论", "Thomas Cormen", 2)
    )
    println("初始图书馆库存:")
    library.foreach { case (id, (name, author, stock)) => 
      println(s"  编号: $id, 书名: 《$name》, 作者: $author, 库存: $stock")
    }

    // 2. 添加两本新书籍
    library += ("B004" -> ("Python从入门到实践", "Eric Matthes", 4))
    library += ("B005" -> ("数据结构与算法", "严蔚敏", 6))
    println("\n添加新书后:")

    // 3. 根据书籍编号查询书籍信息
    val searchId = "B002"
    val bookInfo = library.get(searchId)
    bookInfo match {
      case Some((name, author, stock)) => 
        println(s"查询结果 - 编号: $searchId, 书名: 《$name》, 作者: $author, 库存: $stock")
      case None => 
        println(s"未找到编号为 $searchId 的书籍")
    }

    // 4. 修改某本书的库存数量
    val updateId = "B001"
    library.get(updateId) match {
      case Some((name, author, stock)) =>
        // 更新库存数量(增加2本)
        library(updateId) = (name, author, stock + 2)
        println(s"\n已更新《$name》的库存数量: ${stock} -> ${stock + 2}")
      case None =>
        println(s"未找到编号为 $updateId 的书籍")
    }

    // 5. 删除一本书
    val removeId = "B003"
    library -= removeId
    println(s"\n已删除编号为 $removeId 的书籍")

    // 6. 遍历图书馆书籍Map
    println("\n当前图书馆所有书籍信息:")
    println("=" * 50)
    library.foreach { 
      case (id, (name, author, stock)) =>
        println(f"编号: $id%-6s 书名: 《$name》%-15s 作者: $author%-12s 库存: $stock%-2d")
    }
  }
}

运行结果示例:

Set操作输出:

text

初始图书馆书籍: HashSet(Java编程思想, 算法导论, Scala实战, 设计模式)
添加新书后: HashSet(Java编程思想, 算法导论, Scala实战, 设计模式, Python从入门到实践, 数据结构与算法)
删除书籍后: HashSet(Java编程思想, 算法导论, Scala实战, Python从入门到实践, 数据结构与算法)
《Python从入门到实践》是否在图书馆中: true
第二个图书馆: HashSet(Scala实战, 操作系统原理, Python从入门到实践, C++ Primer)
两个图书馆的并集: HashSet(Java编程思想, 算法导论, Scala实战, Python从入门到实践, 数据结构与算法, 操作系统原理, C++ Primer)
两个图书馆的交集: HashSet(Scala实战, Python从入门到实践)
第一个图书馆相对于第二个的差集: HashSet(Java编程思想, 算法导论, 数据结构与算法)

Map操作输出:

text

初始图书馆库存:
  编号: B001, 书名: 《Java编程思想》, 作者: Bruce Eckel, 库存: 5
  编号: B002, 书名: 《Scala实战》, 作者: Martin Odersky, 库存: 3
  编号: B003, 书名: 《算法导论》, 作者: Thomas Cormen, 库存: 2

添加新书后:
查询结果 - 编号: B002, 书名: 《Scala实战》, 作者: Martin Odersky, 库存: 3

已更新《Java编程思想》的库存数量: 5 -> 7

已删除编号为 B003 的书籍

当前图书馆所有书籍信息:
==================================================
编号: B001   书名: 《Java编程思想》   作者: Bruce Eckel  库存: 7 
编号: B002   书名: 《Scala实战》      作者: Martin Odersky 库存: 3 
编号: B004   书名: 《Python从入门到实践》作者: Eric Matthes  库存: 4 
编号: B005   书名: 《数据结构与算法》  作者: 严蔚敏       库存: 6 

这两个实训完整展示了Scala中Set和Map的常用操作,包括创建、添加、删除、查询、集合运算和遍历等核心功能。