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的常用操作,包括创建、添加、删除、查询、集合运算和遍历等核心功能。