当前位置: 首页 > news >正文

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)

在这里插入图片描述

常见操作
  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 -> 6val 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 -> 12val 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 // 转换为数组
    

相关文章:

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 是用于加速大规模分布式训练的重要工具&#xff0c…...

前端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接口定义&#xff1a; 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/&#xff0c;这个就是将论文中的内容或者补充视频放到一个网页上&#xff0c;以更好的展示他们的工作。因此&#xff0c;这里介绍下如何使用前人提供的模板制作我…...

mongodb/redis/neo4j 如何自己打造一个 web 数据库可视化客户端?

随笔 从千万粉丝“何同学”抄袭开源项目说起&#xff0c;为何纯技术死路一条&#xff1f; 数据源的统一与拆分 监控报警系统的指标、规则与执行闭环 我们的系统应该配置哪些监控报警项&#xff1f; 监控报警系统如何实现自监控? java 老矣&#xff0c;尚能饭否&#xff…...

1、正则表达式

grep匹配 grep用来过滤文本内容&#xff0c;以匹配要查询的结果。 grep root /etc/passwd&#xff1a;匹配包含root的行 -m 数字&#xff1a;匹配几次后停止 -v&#xff1a;取反-i&#xff1a;忽略字符的大小写&#xff0c;默认的&#xff0c;可以不加-n&#xff1a…...

Airsim安装问题:This project was made with a different version of the Unreal Engine.

本文记录如何在 Ubuntu 18.04 系统中配置 AirSim 和 Unreal Engine 4.27&#xff0c;并成功打开默认的 Blocks 环境项目。 环境说明 系统&#xff1a;Ubuntu 18.04Unreal Engine 版本&#xff1a;4.27AirSim&#xff1a;主分支文件路径&#xff1a; Unreal Engine&#xff1a…...

java八股-分布式服务的接口幂等性如何设计?

文章目录 接口幂等token Redis分布式锁 原文视频链接&#xff1a;讲解的流程特别清晰&#xff0c;易懂&#xff0c;收获巨大 【新版Java面试专题视频教程&#xff0c;java八股文面试全套真题深度详解&#xff08;含大厂高频面试真题&#xff09;】 https://www.bilibili.com/…...

vscode python code runner执行乱码

打开vscode code runner插件配置&#xff0c;如图所示&#xff1a; 然后在setting.json修改运行python的默认命令&#xff1a; 将原来 替换成 "python":"set PYTHONIOENCODINGutf8 && python", 参考&#xff1a;Vscode——python环境输出中文乱…...

Java中的继承详解

在Java编程中&#xff0c;继承&#xff08;Inheritance&#xff09;是一种面向对象编程&#xff08;OOP&#xff09;的核心概念&#xff0c;它允许一个类&#xff08;称为子类或派生类&#xff09;继承另一个类&#xff08;称为父类或基类&#xff09;的属性和方法。通过继承&a…...

基于大模型的 UI 自动化系统

基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

Linux 文件类型,目录与路径,文件与目录管理

文件类型 后面的字符表示文件类型标志 普通文件&#xff1a;-&#xff08;纯文本文件&#xff0c;二进制文件&#xff0c;数据格式文件&#xff09; 如文本文件、图片、程序文件等。 目录文件&#xff1a;d&#xff08;directory&#xff09; 用来存放其他文件或子目录。 设备…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来

一、破局&#xff1a;PCB行业的时代之问 在数字经济蓬勃发展的浪潮中&#xff0c;PCB&#xff08;印制电路板&#xff09;作为 “电子产品之母”&#xff0c;其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透&#xff0c;PCB行业面临着前所未有的挑战与机遇。产品迭代…...

23-Oracle 23 ai 区块链表(Blockchain Table)

小伙伴有没有在金融强合规的领域中遇见&#xff0c;必须要保持数据不可变&#xff0c;管理员都无法修改和留痕的要求。比如医疗的电子病历中&#xff0c;影像检查检验结果不可篡改行的&#xff0c;药品追溯过程中数据只可插入无法删除的特性需求&#xff1b;登录日志、修改日志…...

【磁盘】每天掌握一个Linux命令 - iostat

目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat&#xff08;I/O Statistics&#xff09;是Linux系统下用于监视系统输入输出设备和CPU使…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?

论文网址&#xff1a;pdf 英文是纯手打的&#xff01;论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误&#xff0c;若有发现欢迎评论指正&#xff01;文章偏向于笔记&#xff0c;谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...

ffmpeg(四):滤镜命令

FFmpeg 的滤镜命令是用于音视频处理中的强大工具&#xff0c;可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下&#xff1a; ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜&#xff1a; ffmpeg…...

Linux --进程控制

本文从以下五个方面来初步认识进程控制&#xff1a; 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程&#xff0c;创建出来的进程就是子进程&#xff0c;原来的进程为父进程。…...

LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf

FTP 客服管理系统 实现kefu123登录&#xff0c;不允许匿名访问&#xff0c;kefu只能访问/data/kefu目录&#xff0c;不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...

DingDing机器人群消息推送

文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人&#xff0c;点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置&#xff0c;详见说明文档 成功后&#xff0c;记录Webhook 2 API文档说明 点击设置说明 查看自…...