4 scala集合-Map
和 Java 一样,Scala 也有表示键值对(Key-Value)集合的 Map 数据结构。同样,Map 也分不可变和可变,不可变需要使用类 scala.collection.mutable.Map。
1 不可变 Map
可以使用以下语法定义不可变 Map 对象
val/var map = Map(key1 -> value1, key2 -> value2, key3 -> value3, ...) // 推荐,可读性好
val/var map = Map((key1, value1), (key2, value2), (key3, value3), ...)
下面例子,定义了一个球员与身价的 Map,并获取其中一名球员的身价,如果获取的 key 不存在,则会抛出 NoSuchElementException:
scala> val map = Map("C朗"->1500000, "美斯"->21000000, "夏兰特"->150000000, "姆总"->120000000)
val map: Map[String, Int] = Map(C朗 -> 1500000, 美斯 -> 21000000, 夏兰特 -> 150000000, 姆总 -> 120000000)scala> map("美斯")
val res6: Int = 21000000scala> map("武磊")
java.util.NoSuchElementException: key not found: 武磊at scala.collection.immutable.Map$Map4.apply(Map.scala:515)... 35 elided
2 可变 Map
使用 scala.collection.mutable.Map 类,可实现可变 Map 集合,语法跟不可变 Map 一致:
scala> import scala.collection.mutable.Mapscala> val map = Map("C朗"->1500000, "美斯"->21000000, "夏兰特"->150000000, "姆总"->120000000)
val map: scala.collection.mutable.Map[String, Int] = HashMap(夏兰特 -> 150000000, C朗 -> 1500000, 姆总 -> 120000000, 美 斯 -> 21000000)scala> map("夏兰特")
val res8: Int = 150000000scala> map("武磊")
java.util.NoSuchElementException: key not found: 武磊at scala.collection.MapOps.default(Map.scala:274)at scala.collection.MapOps.default$(Map.scala:273)at scala.collection.AbstractMap.default(Map.scala:405)at scala.collection.mutable.HashMap.apply(HashMap.scala:425)... 35 elidedscala> map("武磊") = 1000000scala> map("武磊")
val res10: Int = 1000000
3 Map 的基本操作
3.1 获取值
获取 Map 集合中的值可以使用以下两种方式:
(1) 使用表达式 map(key),当 key 不存在会抛出 NoSuchElementException
(2) 使用 getOrElse(key, defaultValue) 方法
例如:
scala> import scala.collection.mutable.Mapscala> val map = Map("C朗"->1500000, "美斯"->21000000, "夏兰特"->150000000, "姆总"->120000000)
val map: scala.collection.mutable.Map[String, Int] = HashMap(夏兰特 -> 150000000, C朗 -> 1500000, 姆总 -> 120000000, 美 斯 -> 21000000)scala> map.getOrElse("武磊", 500000)
val res11: Int = 500000
3.2 获取所有 key
通过 keys 属性,可以获取 Map 集合中的 key 集合,这个集合为 Set 类型:
scala> import scala.collection.mutable.Mapscala> val map = Map("C朗"->1500000, "美斯"->21000000, "夏兰特"->150000000, "姆总"->120000000)
val map: scala.collection.mutable.Map[String, Int] = HashMap(夏兰特 -> 150000000, C朗 -> 1500000, 姆总 -> 120000000, 美 斯 -> 21000000)scala> map.keys
val res12: Iterable[String] = Set(夏兰特, C朗, 姆总, 美斯)
3.3 获取所有 value
通过 values 属性,可以获取 Map 集合中的 value 集合:
scala> import scala.collection.mutable.Mapscala> val map = Map("C朗"->1500000, "美斯"->21000000, "夏兰特"->150000000, "姆总"->120000000)
val map: scala.collection.mutable.Map[String, Int] = HashMap(夏兰特 -> 150000000, C朗 -> 1500000, 姆总 -> 120000000, 美 斯 -> 21000000)scala> map.values
val res13: Iterable[Int] = Iterable(150000000, 1500000, 120000000, 21000000)
3.4 遍历 Map 对象
使用 for 可以遍历 Map 对象:
scala> import scala.collection.mutable.Mapscala> val map = Map("C朗"->1500000, "美斯"->21000000, "夏兰特"->150000000, "姆总"->120000000)
val map: scala.collection.mutable.Map[String, Int] = HashMap(夏兰特 -> 150000000, C朗 -> 1500000, 姆总 -> 120000000, 美 斯 -> 21000000)scala> for((player, price) <- map) {| println(s"${player}身价为${price}")| }
夏兰特身价为150000000
C朗身价为1500000
姆总身价为120000000
美斯身价为21000000
3.5 增加键值对并返回新的 Map
使用运算符 + 可以在原 Map 对象基础上增加新的键值对,并返回新的 Map 对象。
下面的例子,使用 + 添加了新的 (key,value),并返回新的 Map 对象,原来的 Map 对象不变:
scala> import scala.collection.mutable.Mapscala> val map = Map("C朗"->1500000, "美斯"->21000000, "夏兰特"->150000000, "姆总"->120000000)
val map: scala.collection.mutable.Map[String, Int] = HashMap(夏兰特 -> 150000000, C朗 -> 1500000, 姆总 -> 120000000, 美 斯 -> 21000000)scala> val map1 = map + ("韦世豪" -> 600000)
val map1: scala.collection.mutable.Map[String, Int] = HashMap(夏兰特 -> 150000000, C朗 -> 1500000, 姆总 -> 120000000, 美斯 -> 21000000, 韦世豪 -> 600000)scala> map
val res16: scala.collection.mutable.Map[String, Int] = HashMap(夏兰特 -> 150000000, C朗 -> 1500000, 姆总 -> 120000000, 美斯 -> 21000000)scala> map1
val res17: scala.collection.mutable.Map[String, Int] = HashMap(夏兰特 -> 150000000, C朗 -> 1500000, 姆总 -> 120000000, 美斯 -> 21000000, 韦世豪 -> 600000)
3.6 刪除键值对
- 使用运算符
-可以从原Map对象删除指定的键值对,并返回新的Map对象,原来的Map对象不变。
scala> import scala.collection.mutable.Mapscala> val map = Map("C朗"->1500000, "美斯"->21000000, "夏兰特"->150000000, "姆总"->120000000)
val map: scala.collection.mutable.Map[String, Int] = HashMap(夏兰特 -> 150000000, C朗 -> 1500000, 姆总 -> 120000000, 美 斯 -> 21000000)scala> map - "姆总"
val res18: scala.collection.mutable.Map[String, Int] = HashMap(夏兰特 -> 150000000, C朗 -> 1500000, 美斯 -> 21000000)scala> map
val res19: scala.collection.mutable.Map[String, Int] = HashMap(夏兰特 -> 150000000, C朗 -> 1500000, 姆总 -> 120000000, 美斯 -> 21000000)
- 如果想从
Map对象删除指定的键值对,则可使用remove方法:
scala> import scala.collection.mutable.Mapscala> val map = Map("C朗"->1500000, "美斯"->21000000, "夏兰特"->150000000, "姆总"->120000000)
val map: scala.collection.mutable.Map[String, Int] = HashMap(夏兰特 -> 150000000, C朗 -> 1500000, 姆总 -> 120000000, 美 斯 -> 21000000)scala> map.remove("夏兰特")
val res22: Option[Int] = Some(150000000)scala> map
val res23: scala.collection.mutable.Map[String, Int] = HashMap(C朗 -> 1500000, 姆总 -> 120000000, 美斯 -> 21000000)
相关文章:
4 scala集合-Map
和 Java 一样,Scala 也有表示键值对(Key-Value)集合的 Map 数据结构。同样,Map 也分不可变和可变,不可变需要使用类 scala.collection.mutable.Map。 1 不可变 Map 可以使用以下语法定义不可变 Map 对象 val/var ma…...
QT 对象树模型
QObject是Qt里边绝大部分类的根类 QObject对象之间是以对象树的形式组织起来的。 当两个QObject(或子类)的对象建立了父子关系的时候。子对象就会加入到父对象的一个成员变量叫children(孩子)的list(列表)…...
ubuntu快速安装miniconda
ubuntu快速安装miniconda 环境 ubuntu.22.04 显卡 RTX 3050 关于选择Miniconda还是Anaconda的问题,Anaconda安装包比较大,耗时比较长,如果你是绝对的初学者,选择Anaconda会比较稳妥一些;否则建议你还是选择Miniconda安…...
阿里云游戏服务器多少钱一年?
阿里云游戏服务器租用价格表:4核16G服务器26元1个月、146元半年,游戏专业服务器8核32G配置90元一个月、271元3个月,阿里云服务器网aliyunfuwuqi.com分享阿里云游戏专用服务器详细配置和精准报价: 阿里云游戏服务器租用价格表 阿…...
小游戏和GUI编程(7) | SimpleNN 界面源码解析
小游戏和GUI编程(7) | SimpleNN 界面源码解析 0. 简介 SimpleNN 是 AdamYuan 在高中一年级时用 1 天时间写出来的简易 CNN, 使用 SFML 做 UI, 用于交互式输入手写数字,这个数字被训练好的 CNN 网络执行推理得到识别结果, 它的运行效果如下: 这一篇我们…...
c++设计模式之代理模式
作用 代理模式主要用于,通过代理类,来控制实际对象的访问权限 案例 class VideoSite { public:virtual void freeVideo()0;virtual void vipVideo()0;virtual void trickVideo()0; };class FixBugVideoSite:public VideoSite { public:void freeVideo()…...
第5个-模糊加载
Day 5 - Blurry Loading 1. 项目展示 2. 分析思路 变化过程 数字从 0 不断增长到 100;中间的百分比数字逐渐消失,即透明度 opacity 从 1 到 0;背景图片从模糊变为清晰,滤镜 filter.blur()的参数设置为从 30px 到 0px。 小 tips…...
rtt设备io框架面向对象学习-adc设备
目录 1.adc设备基类2.adc设备基类的子类3.初始化/构造流程3.1设备驱动层3.2 设备驱动框架层3.3 设备io管理层 4.总结5.使用 1.adc设备基类 此层处于设备驱动框架层。也是抽象类。 在/ components / drivers / include / drivers 下的adc.h定义了如下adc设备基类 struct rt_ad…...
面试官:介绍一下Exception和Error之间的区别
前言 大家好,我是chowley,在我之前的面试中,遇到过这样一个问题:Exception和Error之间有什么区别?今天我就来好好地总结一下! 主体 在Java编程中,Exception和Error都是Java中的可抛出对象&am…...
【RabbitMQ(一)】:基本介绍 | 配置安装与快速入门
应该是新年前最后一篇博客了,明天浅浅休息一下,提前祝大家新年快乐捏!😊😊😊 01. 基础理解 1.1 同步调用和异步调用 👉 同步调用 的时候调用者会 阻塞 等待被调用函数或方法执行完成ÿ…...
ElasticSearch之search API
写在前面 本文看下查询相关内容,这也是我们在实际工作中接触的最多的,所以有必要好好学习下! 1:查询的分类 主要分为如下2类: 1:基于get查询参数的URI search 2:基于post body的request body search&am…...
07-Java桥接模式 ( Bridge Pattern )
Java桥接模式 摘要实现范例 桥接模式(Bridge Pattern)是用于把抽象化与实现化解耦,使得二者可以独立变化 桥接模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类,这两种类型的类可被结构化改变而互不影…...
golang集成sentry: go-redis
网上没有找到go-redis集成sentry的库, 所以我简单实现了一个 代码: https://github.com/Shujie-Tan/go-redis-sentry 使用方法: import (redis_sentry "github.com/Shujie-Tan/go-redis-sentry" ) rdb : redis.NewClient(&re…...
用EXCEL从地址(上海)中提取各区(浦东新区等区)信息
背景: 朋友工作需要经常用EXCEL把各上海用户收货地址中的区提取出来,之前一直手动处理,希望我帮忙用EXCEL公式直接提取处理。 数据样式: 中国上海市浦东新区A小区 上海徐汇区B小区 中国,上海,浦东新区&a…...
关于在分布式环境中RVN和使用场景的介绍3
简介 在《关于在分布式环境中RVN和使用场景的介绍2》和《关于在分布式环境中RVN和使用场景的介绍1》中我们介绍了RVN的概念和在一些具体用例中的使用。在本文中我们讨论一下在分布式环境中使用RVN需要注意的问题。 问题 我们在收到一条待处理的事件时,需要检查该…...
计算最小公倍数math.lcm()
【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 计算最小公倍数 math.lcm() 请问以下代码输出的结果是? import math print("【执行】math.lcm(2, 4)") print(math.lcm(2, 4)) print("【执行】math.lcm(1, 2, 3…...
VUE SEO 几种方案经典面试题
1、SSR服务器渲染 Vue.js 是构建客户端应用程序的框架。默认情况下,可以再浏览器中输出Vue组件,进行生成DOM和操作DOM。然而,也可以将同一个组件渲染未服务器端的HTML字符串,将它们直接发送到浏览器,最后将这些静态标…...
Python和VBA批量提取Word中的表格
表格在word文档中常见的文档元素之一。操作word文件时有时需要提取文件中多个表格的内容到一个新的文件,甚至有时还会要提取题注信息。 今天,给大家分享两种批量提取文档中表格的两种方法,分别是VBA法和Python法两种。 一、VBA法提取word中…...
Swift Combine 有序的异步操作 从入门到精通十二
Combine 系列 Swift Combine 从入门到精通一Swift Combine 发布者订阅者操作者 从入门到精通二Swift Combine 管道 从入门到精通三Swift Combine 发布者publisher的生命周期 从入门到精通四Swift Combine 操作符operations和Subjects发布者的生命周期 从入门到精通五Swift Com…...
国产航顺HK32F030M: 超声波测距模块串口通信数据接收与处理
参考代码 /************************************************************************************************** * file usart_async_tx_no_int_rx_rxneint.c * brief 异步串口通信例程, 通过查询TXE标志发送数据,通过RXNE中断接收数据,当中断接收到数据后会将 * …...
KubeSphere 容器平台高可用:环境搭建与可视化操作指南
Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...
19c补丁后oracle属主变化,导致不能识别磁盘组
补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...
基于大模型的 UI 自动化系统
基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...
脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)
一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...
【位运算】消失的两个数字(hard)
消失的两个数字(hard) 题⽬描述:解法(位运算):Java 算法代码:更简便代码 题⽬链接:⾯试题 17.19. 消失的两个数字 题⽬描述: 给定⼀个数组,包含从 1 到 N 所有…...
ESP32读取DHT11温湿度数据
芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...
电脑插入多块移动硬盘后经常出现卡顿和蓝屏
当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时,可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案: 1. 检查电源供电问题 问题原因:多块移动硬盘同时运行可能导致USB接口供电不足&#x…...
Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...
Java求职者面试指南:计算机基础与源码原理深度解析
Java求职者面试指南:计算机基础与源码原理深度解析 第一轮提问:基础概念问题 1. 请解释什么是进程和线程的区别? 面试官:进程是程序的一次执行过程,是系统进行资源分配和调度的基本单位;而线程是进程中的…...
【前端异常】JavaScript错误处理:分析 Uncaught (in promise) error
在前端开发中,JavaScript 异常是不可避免的。随着现代前端应用越来越多地使用异步操作(如 Promise、async/await 等),开发者常常会遇到 Uncaught (in promise) error 错误。这个错误是由于未正确处理 Promise 的拒绝(r…...
