Scala—Map用法详解
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 -> 6val 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 -> 12val 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 // 转换为数组
相关文章:

Scala—Map用法详解
Scala—Map用法详解 在 Scala 中,Map 是一种键值对的集合,其中每个键都是唯一的。Scala 提供了两种类型的 Map:不可变 Map 和可变 Map。 1. 不可变集合(Map) 不可变 Map 是默认的 Map 实现,位于 scala.co…...
极狐GitLab 17.6 正式发布几十项与 DevSecOps 相关的功能【六】
GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署极狐GitLab。 学习极狐GitLab 的相关资料: 极狐GitLab 官网极狐…...

ES6 、ESNext 规范、编译工具babel
ES6 、ESNext 规范、编译工具简介 ES6ES(ECMAScript) vs JS常量进一步探讨 obj对象的扩展面试:使对象属性也不能更改——Object.freeze(obj) 解构deconstruction变量的解构赋值:数组解构赋值:对象解构赋值:…...
DeepSpeed 配置文件(DeepSpeed Configuration Files)详解:中英文解释
中文版 本文详细介绍 DeepSpeed 配置文件,结合 4 卡 3090 的实际使用场景,重点解释各个参数的含义,并提供应对爆显存的方案。 DeepSpeed 配置文件详解:从基础到实战 DeepSpeed 是用于加速大规模分布式训练的重要工具,…...

前端JavaScript(一)---基本介绍
Javascript是一种由Netscape(网景)的LiveScript发展而来的原型化继承的面向对象的动态类型的区分大小写的客户端脚本语言,主要目的是为了解决服务器端语言,比如Perl,遗留的速度问题,为客户提供更流畅的浏览效果。当时服务端需要对…...

文本处理之sed
1、概述 sed是文本编辑器,作用是对文本的内容进行增删改查。 和vim不一样,sed是按行进行处理。 sed一次处理一行内容,处理完一行之后紧接着处理下一行,一直到文件的末尾 模式空间:临时储存,修改的结果临…...

uniapp在App端定义全局弹窗,当打开关闭弹窗会触发onShow、onHide生命周期怎么解决?
在uniapp(App端)中实现自定义弹框,可以通过创建一个透明页面来实现。点击进入当前页面时,页面背景会变透明,用户可以根据自己的需求进行自定义,最终效果类似于弹框。 遇到问题:当打开弹窗(进入弹窗页面)就会触发当前页…...

计算机网络 实验七 NAT配置实验
一、实验目的 通过本实验理解网络地址转换的原理和技术,掌握扩展NAT/NAPT设计、配置和测试。 二、实验原理 NAT配置实验的原理主要基于网络地址转换(NAT)技术,该技术用于将内部私有网络地址转换为外部公有网络地址,从…...

数据结构——排序算法第二幕(交换排序:冒泡排序、快速排序(三种版本) 归并排序:归并排序(分治))超详细!!!!
文章目录 前言一、交换排序1.1 冒泡排序1.2 快速排序1.2.1 hoare版本 快排1.2.2 挖坑法 快排1.2.3 lomuto前后指针 快排 二、归并排序总结 前言 继上篇学习了排序的前面两个部分:直接插入排序和选择排序 今天我们来学习排序中常用的交换排序以及非常稳定的归并排序 快排可是有多…...

【kafka04】消息队列与微服务之Kafka 图形工具
Kafka 在 ZooKeeper 里面的存储结构 topic 结构 /brokers/topics/[topic] partition结构 /brokers/topics/[topic]/partitions/[partitionId]/state broker信息 /brokers/ids/[o...N] 控制器 /controller 存储center controller中央控制器所在kafka broker的信息 消费者 /c…...
剖析前后端 API 接口参数设计:JSON 数据结构化全攻略
在当今软件开发领域,前后端分离架构已成为主流趋势。而 API 接口作为前后端之间数据交互的桥梁,其设计的合理性对系统的可维护性和扩展性起着至关重要的作用。JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式&…...
vue3 多种方式接受props,定义ref,reactive
定义props 1 第一种 interface AddType { dialogStudyVisible: boolean; } const props defineProps<AddType>(); 第二种 // const props defineProps({ // dialogStudyVisible:{ // type:Boolean, // default:false // } // }) 第三种 // const …...

逻辑处理器核心指纹修改
navigator.hardwareConcurrency的属性,可以用来获取CPU的逻辑处理器核心数。 1、navigator.hardwareConcurrency接口定义: third_party\blink\renderer\core\frame\navigator_concurrent_hardware.idl // https://html.spec.whatwg.org/C/#navigator.hardwarecon…...

如何制作项目网页
一、背景 许多论文里经常会有这样一句话Supplementary material can be found at https://hri-eu.github.io/Lami/,这个就是将论文中的内容或者补充视频放到一个网页上,以更好的展示他们的工作。因此,这里介绍下如何使用前人提供的模板制作我…...
mongodb/redis/neo4j 如何自己打造一个 web 数据库可视化客户端?
随笔 从千万粉丝“何同学”抄袭开源项目说起,为何纯技术死路一条? 数据源的统一与拆分 监控报警系统的指标、规则与执行闭环 我们的系统应该配置哪些监控报警项? 监控报警系统如何实现自监控? java 老矣,尚能饭否ÿ…...

1、正则表达式
grep匹配 grep用来过滤文本内容,以匹配要查询的结果。 grep root /etc/passwd:匹配包含root的行 -m 数字:匹配几次后停止 -v:取反-i:忽略字符的大小写,默认的,可以不加-n:…...
Airsim安装问题:This project was made with a different version of the Unreal Engine.
本文记录如何在 Ubuntu 18.04 系统中配置 AirSim 和 Unreal Engine 4.27,并成功打开默认的 Blocks 环境项目。 环境说明 系统:Ubuntu 18.04Unreal Engine 版本:4.27AirSim:主分支文件路径: Unreal Engine:…...

java八股-分布式服务的接口幂等性如何设计?
文章目录 接口幂等token Redis分布式锁 原文视频链接:讲解的流程特别清晰,易懂,收获巨大 【新版Java面试专题视频教程,java八股文面试全套真题深度详解(含大厂高频面试真题)】 https://www.bilibili.com/…...

vscode python code runner执行乱码
打开vscode code runner插件配置,如图所示: 然后在setting.json修改运行python的默认命令: 将原来 替换成 "python":"set PYTHONIOENCODINGutf8 && python", 参考:Vscode——python环境输出中文乱…...
Java中的继承详解
在Java编程中,继承(Inheritance)是一种面向对象编程(OOP)的核心概念,它允许一个类(称为子类或派生类)继承另一个类(称为父类或基类)的属性和方法。通过继承&a…...

工业安全零事故的智能守护者:一体化AI智能安防平台
前言: 通过AI视觉技术,为船厂提供全面的安全监控解决方案,涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面,能够实现对应负责人反馈机制,并最终实现数据的统计报表。提升船厂…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...
ssc377d修改flash分区大小
1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...
生成 Git SSH 证书
🔑 1. 生成 SSH 密钥对 在终端(Windows 使用 Git Bash,Mac/Linux 使用 Terminal)执行命令: ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" 参数说明: -t rsa&#x…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战
“🤖手搓TuyaAI语音指令 😍秒变表情包大师,让萌系Otto机器人🔥玩出智能新花样!开整!” 🤖 Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制(TuyaAI…...
docker 部署发现spring.profiles.active 问题
报错: org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...

(一)单例模式
一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...

【51单片机】4. 模块化编程与LCD1602Debug
1. 什么是模块化编程 传统编程会将所有函数放在main.c中,如果使用的模块多,一个文件内会有很多代码,不利于组织和管理 模块化编程则是将各个模块的代码放在不同的.c文件里,在.h文件里提供外部可调用函数声明,其他.c文…...
Android屏幕刷新率与FPS(Frames Per Second) 120hz
Android屏幕刷新率与FPS(Frames Per Second) 120hz 屏幕刷新率是屏幕每秒钟刷新显示内容的次数,单位是赫兹(Hz)。 60Hz 屏幕:每秒刷新 60 次,每次刷新间隔约 16.67ms 90Hz 屏幕:每秒刷新 90 次,…...
算法刷题-回溯
今天给大家分享的还是一道关于dfs回溯的问题,对于这类问题大家还是要多刷和总结,总体难度还是偏大。 对于回溯问题有几个关键点: 1.首先对于这类回溯可以节点可以随机选择的问题,要做mian函数中循环调用dfs(i&#x…...