Map 的定义和创建
Map是一种存储键值对的数据结构,每个键在 Map 中是唯一的。在 Scala 中,我们可以使用多种方式创建 Map
Map 创建格式:
- 不可变 Map:
val mapName: Map[KeyType, ValueType] = Map(key1 -> value1, key2 -> value2,...) - 可变 Map(需导入
scala.collection.mutable.Map):val mapName:mutable.Map[KeyType, ValueType] =mutable.Map(key1 -> value2,...)
package map
/*
map 映射,表示一种一一对应的关系
*/
object map01 {
def main(args: Array[String]): Unit = {
//创建可变的map 键值对
val scores=scala.collection.mutable.Map("alice"->90,"小珍"->60)
//添加
scores+=("max"->100)
println(scores)
//创建不可变的map
val provinceInfo=scala.collection.immutable.Map("42"->"湖北")
// provinceInfo+=("14"->"山西")
val newInfo=provinceInfo+("14"->"山西")
println(newInfo)
}
}
Map 的常用方法 - 添加元素
对于可变Map
- 对于可变 Map,我们可以使用 += 操作符或者 put 方法来添加键值对。
- 添加元素到可变 Map 的格式(+= 操作符):
mapName+= (key -> value) - 添加元素到可变 Map 的格式(put 方法):
mapName.put(key, value)
对于不可变 Map
由于其不可修改的特性,我们需要创建一个新的 Map 来包 含新的元素。
添加元素到不可变 Map 的格式(通过创建新 Map):val newMapName: Map[KeyType, ValueType] = oldMapName + (newKey ->newValue)
Map 的常用方法 - 查询元素
- 使用 get 方法来查询 Map 中的值,或者直接Map(key)。
- 查询 Map 元素的格式(get 方法):
- val valueOption:
Option[ValueType] =mapName.get(key)
Map 的常用方法 - 删除元素(仅针对可变 Map)
- 对于可变 Map,我们可以使用 -= 操作符或者 remove 方法来删除键值对。
- 删除可变 Map 元素的格式(-= 操作符):
mapName -= key - 删除可变 Map 元素的格式(remove 方法)
mapName.remove(key)
Map 的遍历
1.使用 for 循环遍历 Map 的格式:
for ((key, value) <- mapName) {
// 操作,如打印 key 和 value
}
2.使用 foreach 方法遍历 Map 的格式:
mapName.foreach { case (key, value) =>
// 操作,如打印 key 和 value
}
映射完整代码示例:
package map
/*
map 映射,表示一种一一对应的关系
1.添加
2.删除
3.查询对应的值
4.遍历,把所有的数据都返回一遍
*/
object map01 {
def main(args: Array[String]): Unit = {
//创建可变的map 键值对
val scores=scala.collection.mutable.Map("alice"->90,"小珍"->60)
//1.添加
scores+=("max"->100)
//2.删除alice.删除操作是根据key来做的
scores-="alice"
//3.查询,查看“小珍”的分数,rst是一个option类型
val rst=scores.get("小珍")
if(rst.isEmpty){
println("小珍没有成绩")
}else{
println(rst.get)
}
//4.打印scores
println(scores)
//for
for((key,value)<-scores){
println(s"${key},${value}分")
}
//foreach
scores.foreach({
case(key,value)=>println(s"${key},${value}分")
})
}
}
实训任务:
- 创建一个可变 Map,用于存储图书馆中的书籍信息(键为书籍编号,值为包含书籍名称、作者、库存数量的元组),初始化为包含几本你喜欢的书籍信息。
- 使用 += 操作符添加两本新的书籍到图书馆集合中。
- 根据书籍编号查询某一本特定的书籍信息,使用 get 方法,并输出结果。
- 修改某本书籍的库存数量(假设可以通过键找到对应的元组并修改其中的值,这里体现可变 Map 的特性)。
- 使用 -= 操作符从图书馆集合中删除一本书。
- 遍历图书馆书籍 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