set和map实训任务

61 阅读4分钟

set实训任务:

图书馆书籍管理系统相关的练习。内容要求:

  1. 创建一个可变 Set,用于存储图书馆中的书籍信息(假设书籍信息用字符串表示,如 “Java 编程思想”“Scala 实战” 等),初始化为包含几本你喜欢的书籍。
  2. 添加两本新的书籍到图书馆集合中,使用 += 操作符。
  3. 从图书馆集合中删除一本书,使用 -= 操作符。
  4. 检查某一本特定的书籍(如 “Python 从入门到实践”)是否在图书馆集合中,使用 contains 方法,并输出结果。
  5. 创建另一个可变 Set,表示另一个图书馆的书籍集合。
  6. 求出两个图书馆书籍集合的并集,使用 union 方法,并输出结果。
  7. 求出两个图书馆书籍集合的交集,使用 intersect 方法,并输出结果。
  8. 求出当前图书馆相对于另一个图书馆的差集,使用 diff 方法,并输出结果
import scala.collection.mutable

object LibManager {
  def main(args: Array[String]): Unit = {
    // 1. 创建可变 Set
    val lib1 = mutable.Set("Java编程", "Scala实战", "算法")
    println("初始书籍: " + lib1)

    // 2. 添加新书
    lib1 += "Python入门"
    lib1 += "C++基础"
    println("添加后: " + lib1)

    // 3. 删除书
    lib1 -= "算法"
    println("删除后: " + lib1)

    // 4. 检查书是否存在
    val checkBook = "Python入门"
    val hasBook = lib1.contains(checkBook)
    println(s"有《$checkBook》吗: $hasBook")

    // 5. 创建第二个图书馆
    val lib2 = mutable.Set("Scala实战", "Python入门", "计算机系统", "设计模式")
    println("第二馆: " + lib2)

    // 6. 并集
    val union = lib1.union(lib2)
    println("并集: " + union)

    // 7. 交集
    val intersect = lib1.intersect(lib2)
    println("交集: " + intersect)

    // 8. 差集
    val diff = lib1.diff(lib2)
    println("差集: " + diff)
  }
}

运行结果如下:

初始书籍: Set(Java编程, Scala实战, 算法)
添加后: Set(Java编程, Scala实战, 算法, Python入门, C++基础)
删除后: Set(Java编程, Scala实战, Python入门, C++基础)
有《Python入门》吗: true
第二馆: Set(Scala实战, Python入门, 计算机系统, 设计模式)
并集: Set(Java编程, Scala实战, Python入门, C++基础, 计算机系统, 设计模式)
交集: Set(Scala实战, Python入门)
差集: Set(Java编程, C++基础)

map实训任务

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

object LibApp {
  def main(args: Array[String]): Unit = {
    // 1. 创建可变 Map
    val lib = mutable.Map(
      "B001" -> ("Java编程", "Bruce", 3),
      "B002" -> ("Scala实战", "Martin", 2),
      "B003" -> ("算法", "Thomas", 1)
    )
    println("初始:")
    printBooks(lib)

    // 2. 添加新书
    lib += ("B004" -> ("Python入门", "Eric", 4))
    lib += ("B005" -> ("C++基础", "Stanley", 2))
    println("\n添加后:")
    printBooks(lib)

    // 3. 查询书籍
    val id = "B003"
    val book = lib.get(id)
    println(s"\n查 '$id': $book")
    
    lib.get(id) match {
      case Some((name, author, stock)) => 
        println(s"详情: $id, $name, $author, $stock")
      case None => 
        println(s"无 '$id'")
    }

    // 4. 修改库存
    val updateId = "B001"
    lib.get(updateId) match {
      case Some((name, author, _)) =>
        lib(updateId) = (name, author, 5)
        println(s"\n更新 '$updateId' 库存为 5")
      case None =>
        println(s"\n无 '$updateId'")
    }

    // 5. 删除书
    val delId = "B002"
    lib -= delId
    println(s"\n删除 '$delId' 后:")
    printBooks(lib)

    // 6. 遍历并打印所有书籍信息
    println("\n 遍历所有书籍:")
    lib.foreach { case (id, (name, author, stock)) => 
      println(s"  编号: $id, 书名: $name, 作者: $author, 库存: $stock")
    }
  }

  def printBooks(books: mutable.Map[String, (String, String, Int)]): Unit = {
    books.foreach { case (id, (name, author, stock)) => 
      println(s"  $id: $name, $author, $stock")
    }
  }
}

运行结果如下:

初始:
  B001: Java编程, Bruce, 3
  B002: Scala实战, Martin, 2
  B003: 算法, Thomas, 1

添加后:
  B001: Java编程, Bruce, 3
  B002: Scala实战, Martin, 2
  B003: 算法, Thomas, 1
  B004: Python入门, Eric, 4
  B005: C++基础, Stanley, 2

查 'B003': Some((算法,Thomas,1))
详情: B003, 算法, Thomas, 1

更新 'B001' 库存为 5

删除 'B002' 后:
  B001: Java编程, Bruce, 5
  B003: 算法, Thomas, 1
  B004: Python入门, Eric, 4
  B005: C++基础, Stanley, 2

遍历所有书籍:
  编号: B001, 书名: Java编程, 作者: Bruce, 库存: 5
  编号: B003, 书名: 算法, 作者: Thomas, 库存: 1
  编号: B004, 书名: Python入门, 作者: Eric, 库存: 4
  编号: B005, 书名: C++基础, 作者: Stanley, 库存: 2