set与map实训内容

47 阅读4分钟

set实训内容

图书馆书籍管理系统相关的练习。内容要求:
1.创建一个可变 Set,用于存储图书馆中的书籍信息(假设书籍信息用字符串表示,如 “Java 编程思想”“Scala 实战” 等),初始化为包含几本你喜欢的书籍。

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

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

4.检查某一本特定的书籍(如 “Python 从入门到实践”)是否在图书馆集合中,使用 contains 方法,并输出结果。

5.创建另一个可变 Set,表示另一个图书馆的书籍集合。

6.求出两个图书馆书籍集合的并集,使用 union 方法,并输出结果。

7.求出两个图书馆书籍集合的交集,使用 intersect 方法,并输出结果。

8.求出当前图书馆相对于另一个图书馆的差集,使用 diff 方法,并输出结果
代码:

// 1. 导入可变Set
import scala.collection.mutable

object set04 {
  def main(args: Array[String]): Unit = {
    // 1. 初始化第一个图书馆的可变Set(存储书籍名称)
    val library1: mutable.Set[String] = mutable.Set(
      "Java编程思想",
      "Scala实战",
      "数据结构与算法分析",
      "深入理解Java虚拟机"
    )
    println("=== 初始图书馆1书籍 ===")
    printSet(library1)


    // 2. 使用 += 添加两本新书
    library1 += "Python从入门到实践"
    library1 += "机器学习实战"
    println("\n=== 图书馆1添加新书后 ===")
    printSet(library1)


    // 3. 使用 -= 删除一本书
    val bookToDelete = "Scala实战"
    library1 -= bookToDelete
    println(s"\n=== 图书馆1删除《$bookToDelete》后 ===")
    printSet(library1)


    // 4. 使用 contains 检查某本书是否存在
    val bookToCheck = "Python从入门到实践"
    val exists = library1.contains(bookToCheck)
    println(s"\n=== 检查《$bookToCheck》是否在图书馆1中 ===")
    println(if (exists) "存在" else "不存在")


    // 5. 创建第二个图书馆的可变Set
    val library2: mutable.Set[String] = mutable.Set(
      "Python从入门到实践",
      "机器学习实战",
      "算法导论",
      "统计学习方法"
    )
    println("\n=== 图书馆2书籍 ===")
    printSet(library2)


    // 6. 求两个图书馆的并集(所有书籍,去重)
    val unionSet = library1.union(library2)
    println("\n=== 两个图书馆的并集 ===")
    printSet(unionSet)


    // 7. 求两个图书馆的交集(共同拥有的书籍)
    val intersectSet = library1.intersect(library2)
    println("\n=== 两个图书馆的交集 ===")
    printSet(intersectSet)


    // 8. 求图书馆1相对于图书馆2的差集(图书馆1有但图书馆2没有的书籍)
    val diffSet = library1.diff(library2)
    println("\n=== 图书馆1相对于图书馆2的差集 ===")
    printSet(diffSet)
  }


  // 辅助方法:格式化打印Set内容
  def printSet(books: mutable.Set[String]): Unit = {
    if (books.isEmpty) {
      println("该图书馆暂无书籍")
    } else {
      println(books.mkString("{", ", ", "}"))
    }
  }
}

输出结果:

结果.png

map实训内容

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

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

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

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

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

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

输出代码:

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

object map03 {
  def main(args: Array[String]): Unit = {
    // 1. 初始化可变Map(键:书籍编号,值:(书名, 作者, 库存数量))
    val library: mutable.Map[Int, (String, String, Int)] = mutable.Map(
      101 -> ("算法导论", "Thomas H. Cormen", 5),
      102 -> ("数据结构与算法分析", "Mark Allen Weiss", 3),
      103 -> ("Python编程:从入门到实践", "Eric Matthes", 8)
    )
    println("=== 初始图书馆书籍信息 ===")
    printBooks(library) // 调用遍历打印方法


    // 2. 使用 += 添加两本新书
    library += 104 -> ("深入理解Java虚拟机", "周志明", 4)
    library += 105 -> ("机器学习实战", "Peter Harrington", 6)
    println("\n=== 添加两本新书后 ===")
    printBooks(library)


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


    // 4. 修改某本书的库存数量(可变Map支持直接更新值)
    val updateId = 102
    library.get(updateId) match {
      case Some((name, author, stock)) =>
        library(updateId) = (name, author, stock + 2) // 库存增加2本
        println(s"\n=== 修改编号 $updateId 的库存后 ===")
        println(s"编号:$updateId,书名:$name,作者:$author,原库存:$stock,新库存:${stock + 2}")
      case None =>
        println(s"未找到编号为 $updateId 的书籍,无法修改库存")
    }


    // 5. 使用 -= 删除一本书
    val deleteId = 101
    library -= deleteId
    println(s"\n=== 删除编号 $deleteId 的书籍后 ===")
    printBooks(library)


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


  // 辅助方法:遍历打印Map中的书籍信息
  def printBooks(library: mutable.Map[Int, (String, String, Int)]): Unit = {
    if (library.isEmpty) {
      println("图书馆暂无书籍")
    } else {
      library.foreach { case (id, (name, author, stock)) =>
        println(f"编号:$id%3d,书名:$name%-20s,作者:$author%-15s,库存:$stock%2d本")
      }
    }
  }
}

输出结果:

25.png