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中断接收数据,当中断接收到数据后会将 * …...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂
蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...
oracle与MySQL数据库之间数据同步的技术要点
Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异,它们的数据同步要求既要保持数据的准确性和一致性,又要处理好性能问题。以下是一些主要的技术要点: 数据结构差异 数据类型差异ÿ…...

页面渲染流程与性能优化
页面渲染流程与性能优化详解(完整版) 一、现代浏览器渲染流程(详细说明) 1. 构建DOM树 浏览器接收到HTML文档后,会逐步解析并构建DOM(Document Object Model)树。具体过程如下: (…...
生成 Git SSH 证书
🔑 1. 生成 SSH 密钥对 在终端(Windows 使用 Git Bash,Mac/Linux 使用 Terminal)执行命令: ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" 参数说明: -t rsa&#x…...

苍穹外卖--缓存菜品
1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据,减少数据库查询操作。 缓存逻辑分析: ①每个分类下的菜品保持一份缓存数据…...

【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建
华为云FlexusDeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色,华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型,能助力我们轻松驾驭 DeepSeek-V3/R1,本文中将分享如何…...

HashMap中的put方法执行流程(流程图)
1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中,其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下: 初始判断与哈希计算: 首先,putVal 方法会检查当前的 table(也就…...