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)

在这里插入图片描述

常见操作
  1. 添加键值对
    • +:添加一个键值对
    • ++:添加多个键值对

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

在这里插入图片描述

  1. 删除键值对
    • -:删除一个键值对
    • --:删除多个键值对

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

在这里插入图片描述

  1. 检查键是否存在

    • contains:检查是否包含某个键
    val containsOne = map1.contains("one") // 结果: true
    
  2. 获取值

    • apply:通过键获取值
    • get:通过键获取值,返回 Option 类型
    • getOrElse:通过键获取值,如果不存在则返回默认值

val valueOfOne = map1("one") // 获取键 "one" 对应的值
val optionValueOfOne = map1.get("one") // 获取键 "one" 对应的值,返回 Option
val defaultValue = map1.getOrElse("six", 0) // 获取键 "six" 对应的值,如果不存在则返回 0

在这里插入图片描述

  1. 遍历键值对

    • 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
    
  2. 转换操作

    • 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)

在这里插入图片描述

常见操作
  1. 添加键值对
    • +=:添加一个键值对
    • ++=:添加多个键值对

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

在这里插入图片描述

  1. 删除键值对
    • -=:删除一个键值对
    • --=:删除多个键值对

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

在这里插入图片描述

  1. 检查键是否存在

    • contains:检查是否包含某个键
    val containsOne = map1.contains("one") // 结果: false
    
  2. 获取值

    • apply:通过键获取值
    • get:通过键获取值,返回 Option 类型
    • getOrElse:通过键获取值,如果不存在则返回默认值

val valueOfFour = map1("four") // 获取键 "four" 对应的值
val optionValueOfFour = map1.get("four") // 获取键 "four" 对应的值,返回 Option
val defaultValue = map1.getOrElse("seven", 0) // 获取键 "seven" 对应的值,如果不存在则返回 0

在这里插入图片描述

  1. 遍历键值对

    • 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
    
  2. 转换操作

    • toList:转换为 List
    • toArray:转换为数组
    val list = map1.toList // 转换为 List
    val array = map1.toArray // 转换为数组
    

Logo

欢迎加入西安开发者社区!我们致力于为西安地区的开发者提供学习、合作和成长的机会。参与我们的活动,与专家分享最新技术趋势,解决挑战,探索创新。加入我们,共同打造技术社区!

更多推荐