Scala—Map用法详解
在 Scala 中,Map 是一种键值对的集合,其中每个键都是唯一的。Scala 提供了两种类型的 Map:不可变 Map 和可变 Map。

1. 不可变集合(Map)
不可变 Map 是默认的 Map 实现,位于 scala.collection.immutable 包中。一旦创建,不可变 Map 的内容不能被修改,但可以通过操作返回新的 Map。
// 创建一个空的 Map
val emptyMap: Map[String, Int] = Map()
// 创建一个包含初始键值对的 Map
val map1: Map[String, Int] = Map("one" -> 1, "two" -> 2, "three" -> 3)

常见操作
- 添加键值对
+:添加一个键值对++:添加多个键值对
val newMap1 = map1 + ("four" -> 4) // 添加一个键值对
val newMap2 = map1 ++ Map("four" -> 4, "five" -> 5) // 添加多个键值对

- 删除键值对
-:删除一个键值对--:删除多个键值对
val newMap3 = map1 - "one" // 删除一个键值对
val newMap4 = map1 -- List("one", "two") // 删除多个键值对

-
检查键是否存在
contains:检查是否包含某个键
val containsOne = map1.contains("one") // 结果: true -
获取值
apply:通过键获取值get:通过键获取值,返回Option类型getOrElse:通过键获取值,如果不存在则返回默认值
val valueOfOne = map1("one") // 获取键 "one" 对应的值
val optionValueOfOne = map1.get("one") // 获取键 "one" 对应的值,返回 Option
val defaultValue = map1.getOrElse("six", 0) // 获取键 "six" 对应的值,如果不存在则返回 0

-
遍历键值对
foreach:遍历所有键值对keys:获取所有键values:获取所有值map:映射所有键值对filter:过滤键值对
map1.foreach { case (key, value) => println(s"$key -> $value") } // 遍历并打印所有键值对 val keys = map1.keys // 获取所有键 val values = map1.values // 获取所有值 val mappedMap = map1.map { case (key, value) => (key, value * 2) } // 映射所有键值对 println(mappedMap.mkString(", ")) // 输出: one -> 2, two -> 4, three -> 6 val filteredMap = map1.filter { case (key, value) => value > 1 } // 过滤值大于 1 的键值对 println(filteredMap.mkString(", ")) // 输出: two -> 2, three -> 3 -
转换操作
toList:转换为ListtoArray:转换为数组
val list = map1.toList // 转换为 List val array = map1.toArray // 转换为数组
2. 可变集合(mutable.Map)
可变 Map 位于 scala.collection.mutable 包中,可以动态地添加和删除键值对。
import scala.collection.mutable.Map
// 创建一个空的 Map
val emptyMap: Map[String, Int] = Map()
// 创建一个包含初始键值对的 Map
val map1: Map[String, Int] = Map("one" -> 1, "two" -> 2, "three" -> 3)

常见操作
- 添加键值对
+=:添加一个键值对++=:添加多个键值对
map1 += ("four" -> 4) // 添加一个键值对
map1 ++= Map("five" -> 5, "six" -> 6) // 添加多个键值对

- 删除键值对
-=:删除一个键值对--=:删除多个键值对
map1 -= "one" // 删除一个键值对
map1 --= List("two", "three") // 删除多个键值对

-
检查键是否存在
contains:检查是否包含某个键
val containsOne = map1.contains("one") // 结果: false -
获取值
apply:通过键获取值get:通过键获取值,返回Option类型getOrElse:通过键获取值,如果不存在则返回默认值
val valueOfFour = map1("four") // 获取键 "four" 对应的值
val optionValueOfFour = map1.get("four") // 获取键 "four" 对应的值,返回 Option
val defaultValue = map1.getOrElse("seven", 0) // 获取键 "seven" 对应的值,如果不存在则返回 0

-
遍历键值对
foreach:遍历所有键值对keys:获取所有键values:获取所有值map:映射所有键值对filter:过滤键值对
map1.foreach { case (key, value) => println(s"$key -> $value") } // 遍历并打印所有键值对 val keys = map1.keys // 获取所有键 val values = map1.values // 获取所有值 val mappedMap = map1.map { case (key, value) => (key, value * 2) } // 映射所有键值对 println(mappedMap.mkString(", ")) // 输出: four -> 8, five -> 10, six -> 12 val filteredMap = map1.filter { case (key, value) => value > 4 } // 过滤值大于 4 的键值对 println(filteredMap.mkString(", ")) // 输出: five -> 5, six -> 6 -
转换操作
toList:转换为ListtoArray:转换为数组
val list = map1.toList // 转换为 List val array = map1.toArray // 转换为数组



















