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

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 一样&#xff0c;Scala 也有表示键值对&#xff08;Key-Value&#xff09;集合的 Map 数据结构。同样&#xff0c;Map 也分不可变和可变&#xff0c;不可变需要使用类 scala.collection.mutable.Map。 1 不可变 Map 可以使用以下语法定义不可变 Map 对象 val/var ma…...

QT 对象树模型

QObject是Qt里边绝大部分类的根类 QObject对象之间是以对象树的形式组织起来的。 当两个QObject&#xff08;或子类&#xff09;的对象建立了父子关系的时候。子对象就会加入到父对象的一个成员变量叫children&#xff08;孩子&#xff09;的list&#xff08;列表&#xff09;…...

ubuntu快速安装miniconda

ubuntu快速安装miniconda 环境 ubuntu.22.04 显卡 RTX 3050 关于选择Miniconda还是Anaconda的问题&#xff0c;Anaconda安装包比较大&#xff0c;耗时比较长&#xff0c;如果你是绝对的初学者&#xff0c;选择Anaconda会比较稳妥一些&#xff1b;否则建议你还是选择Miniconda安…...

阿里云游戏服务器多少钱一年?

阿里云游戏服务器租用价格表&#xff1a;4核16G服务器26元1个月、146元半年&#xff0c;游戏专业服务器8核32G配置90元一个月、271元3个月&#xff0c;阿里云服务器网aliyunfuwuqi.com分享阿里云游戏专用服务器详细配置和精准报价&#xff1a; 阿里云游戏服务器租用价格表 阿…...

小游戏和GUI编程(7) | SimpleNN 界面源码解析

小游戏和GUI编程(7) | SimpleNN 界面源码解析 0. 简介 SimpleNN 是 AdamYuan 在高中一年级时用 1 天时间写出来的简易 CNN, 使用 SFML 做 UI, 用于交互式输入手写数字&#xff0c;这个数字被训练好的 CNN 网络执行推理得到识别结果, 它的运行效果如下&#xff1a; 这一篇我们…...

c++设计模式之代理模式

作用 代理模式主要用于&#xff0c;通过代理类&#xff0c;来控制实际对象的访问权限 案例 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&#xff1b;中间的百分比数字逐渐消失&#xff0c;即透明度 opacity 从 1 到 0&#xff1b;背景图片从模糊变为清晰&#xff0c;滤镜 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之间的区别

前言 大家好&#xff0c;我是chowley&#xff0c;在我之前的面试中&#xff0c;遇到过这样一个问题&#xff1a;Exception和Error之间有什么区别&#xff1f;今天我就来好好地总结一下&#xff01; 主体 在Java编程中&#xff0c;Exception和Error都是Java中的可抛出对象&am…...

【RabbitMQ(一)】:基本介绍 | 配置安装与快速入门

应该是新年前最后一篇博客了&#xff0c;明天浅浅休息一下&#xff0c;提前祝大家新年快乐捏&#xff01;&#x1f60a;&#x1f60a;&#x1f60a; 01. 基础理解 1.1 同步调用和异步调用 &#x1f449; 同步调用 的时候调用者会 阻塞 等待被调用函数或方法执行完成&#xff…...

ElasticSearch之search API

写在前面 本文看下查询相关内容&#xff0c;这也是我们在实际工作中接触的最多的&#xff0c;所以有必要好好学习下&#xff01; 1&#xff1a;查询的分类 主要分为如下2类&#xff1a; 1:基于get查询参数的URI search 2&#xff1a;基于post body的request body search&am…...

07-Java桥接模式 ( Bridge Pattern )

Java桥接模式 摘要实现范例 桥接模式&#xff08;Bridge Pattern&#xff09;是用于把抽象化与实现化解耦&#xff0c;使得二者可以独立变化 桥接模式涉及到一个作为桥接的接口&#xff0c;使得实体类的功能独立于接口实现类&#xff0c;这两种类型的类可被结构化改变而互不影…...

golang集成sentry: go-redis

网上没有找到go-redis集成sentry的库&#xff0c; 所以我简单实现了一个 代码&#xff1a; https://github.com/Shujie-Tan/go-redis-sentry 使用方法&#xff1a; import (redis_sentry "github.com/Shujie-Tan/go-redis-sentry" ) rdb : redis.NewClient(&re…...

用EXCEL从地址(上海)中提取各区(浦东新区等区)信息

背景&#xff1a; 朋友工作需要经常用EXCEL把各上海用户收货地址中的区提取出来&#xff0c;之前一直手动处理&#xff0c;希望我帮忙用EXCEL公式直接提取处理。 数据样式&#xff1a; 中国上海市浦东新区A小区 上海徐汇区B小区 中国&#xff0c;上海&#xff0c;浦东新区&a…...

关于在分布式环境中RVN和使用场景的介绍3

简介 在《关于在分布式环境中RVN和使用场景的介绍2》和《关于在分布式环境中RVN和使用场景的介绍1》中我们介绍了RVN的概念和在一些具体用例中的使用。在本文中我们讨论一下在分布式环境中使用RVN需要注意的问题。 问题 我们在收到一条待处理的事件时&#xff0c;需要检查该…...

计算最小公倍数math.lcm()

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 计算最小公倍数 math.lcm() 请问以下代码输出的结果是&#xff1f; import math print("【执行】math.lcm(2, 4)") print(math.lcm(2, 4)) print("【执行】math.lcm(1, 2, 3…...

VUE SEO 几种方案经典面试题

1、SSR服务器渲染 Vue.js 是构建客户端应用程序的框架。默认情况下&#xff0c;可以再浏览器中输出Vue组件&#xff0c;进行生成DOM和操作DOM。然而&#xff0c;也可以将同一个组件渲染未服务器端的HTML字符串&#xff0c;将它们直接发送到浏览器&#xff0c;最后将这些静态标…...

Python和VBA批量提取Word中的表格

表格在word文档中常见的文档元素之一。操作word文件时有时需要提取文件中多个表格的内容到一个新的文件&#xff0c;甚至有时还会要提取题注信息。 今天&#xff0c;给大家分享两种批量提取文档中表格的两种方法&#xff0c;分别是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 实现&#xff0c;展示如何创建和管理多个 OkHttpClient 实例&#xff0c;分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂

蛋白质结合剂&#xff08;如抗体、抑制肽&#xff09;在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上&#xff0c;高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术&#xff0c;但这类方法普遍面临资源消耗巨大、研发周期冗长…...

oracle与MySQL数据库之间数据同步的技术要点

Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异&#xff0c;它们的数据同步要求既要保持数据的准确性和一致性&#xff0c;又要处理好性能问题。以下是一些主要的技术要点&#xff1a; 数据结构差异 数据类型差异&#xff…...

页面渲染流程与性能优化

页面渲染流程与性能优化详解&#xff08;完整版&#xff09; 一、现代浏览器渲染流程&#xff08;详细说明&#xff09; 1. 构建DOM树 浏览器接收到HTML文档后&#xff0c;会逐步解析并构建DOM&#xff08;Document Object Model&#xff09;树。具体过程如下&#xff1a; (…...

生成 Git SSH 证书

&#x1f511; 1. ​​生成 SSH 密钥对​​ 在终端&#xff08;Windows 使用 Git Bash&#xff0c;Mac/Linux 使用 Terminal&#xff09;执行命令&#xff1a; ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" ​​参数说明​​&#xff1a; -t rsa&#x…...

苍穹外卖--缓存菜品

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

【Java_EE】Spring MVC

目录 Spring Web MVC ​编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 ​编辑参数重命名 RequestParam ​编辑​编辑传递集合 RequestParam 传递JSON数据 ​编辑RequestBody ​…...

Java入门学习详细版(一)

大家好&#xff0c;Java 学习是一个系统学习的过程&#xff0c;核心原则就是“理论 实践 坚持”&#xff0c;并且需循序渐进&#xff0c;不可过于着急&#xff0c;本篇文章推出的这份详细入门学习资料将带大家从零基础开始&#xff0c;逐步掌握 Java 的核心概念和编程技能。 …...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建

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

HashMap中的put方法执行流程(流程图)

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