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
:转换为List
toArray
:转换为数组
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
:转换为List
toArray
:转换为数组
val list = map1.toList // 转换为 List val array = map1.toArray // 转换为数组