Scala中的Map 集合详解

news2024/11/19 13:42:09

目录

一、不可变长Map集合

1.map的声明与遍历

2.map的常用方法:get、getOrElse、keys、values、++、++:

二、可变长Map集合

三、Map的其他方法


key -> value 的语法形式实际上是用库中的隐式转换实现的,实际调用了 Map.apply 方法。Map.apply 方法的参数为一个两元素的元组(键值对)。

map 的参数是一个函数,以下示例展示了定义这个函数的两种方法。每个键值对(元组)都将被传入到该函数中。我们可以将其参数定义为一个两元素的元组。

一、不可变长Map集合

1.map的声明与遍历

map定义:其中当出现同一个key值的时候,后面的值会将前面的值进行覆盖。

 //一、不可变长的Map集合
    //map传入key、value的形式有两种:1,key->value  2,(key,value)
    val map = Map[String,Int]("a"->100,"b"->200,("c",300),("d",400))

    //三种遍历map集合的方式,但返回的结果不同,for跟foreach结果一样
    println(map)
    map.foreach(print)
    for (elem <- map) {
      print(elem)
    }

2.map的常用方法:get、getOrElse、keys、values、++、++:

根据key返回value值,使用的是一个get,这个时候如果存在对应的值就会返回一个Some类型的值,反之则是一个None,这俩个类型都是Option的子类。最后再.get就会返回对应的值。

    //get方法,传入key,返回some(value)
    val value: Option[Int] = map.get("a")
    print(value)
    //如果想只返回value,则需要用两个get,如下:
    val value1: Int = map.get("a").get
    print(value1)
    

当对一个不存在的key获取他的值的时候,很显然是会报错的,这个时候可以使用 ,getOrElse()方法,表示当不存在的时候,返回这个方法里面的东西。 

    //如果map中没有传入的key,可以用getOrElse,返回指定的值
    val value2 = map.get("aa").getOrElse(100)
    print(value2)

获取所有的key,使用.keys方法,返回值的类型是一个 Iterable [String],根据所获取的key值打印出所对应的value值 

    //keys:获取map所有的key
    val keys: Iterable[String] = map.keys

    //遍历每个key,获取对应的value
    keys.foreach(key =>{
      val value3: Int = map.get(key).get
      print(s"key is $key , value is $value3")
    })
//values:获取map中所有的value
    val values: Iterable[Int] = map.values
    values.foreach(print)
val map1 = Map[String,Int](("a",1),("b",2),("c",3),("d",4))
    val map2 = Map[String,Int](("a",100),("b",2),("c",300),("e",400))
    //两个方法,map1.++(map2):将map1和map2合并成一个map集合,但map2覆盖map1,也就是两个集合有相同的key,取map2的值
    //        map1.++:(map2):将map1和map2合并成一个map集合,但map1覆盖map2,也就是两个集合有相同的key,取map1的值
    val result: Map[String, Int] = map1.++(map2)
    val result2: Map[String, Int] = map1.++:(map2)

二、可变长Map集合

可变长的Map,导入对应的Map包,使用put方法进行添加元素

 //可变长Map集合
    //跟set一样,没有MapBuffer,定义可变长Map集合需要导包
    import scala.collection.mutable.Map
    val map3 = Map[String,Int]()
    map3.put("a",100)
    map3.put("b",200)
    map3.put("c",300)

 filter过滤方法:

 //filter :过滤掉不需要的,留下满足条件的
    val result3: mutable.Map[String, Int] = map3.filter(tp => {
      val key = tp._1 //._1返回key
      val value = tp._2 //._2返回value
      value == 200
    })
    result3.foreach(println)

三、Map的其他方法

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/451211.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

多维时序 | MATLAB实现BO-CNN-LSTM贝叶斯优化卷积神经网络-长短期记忆网络多变量时间序列预测

多维时序 | MATLAB实现BO-CNN-LSTM贝叶斯优化卷积神经网络-长短期记忆网络多变量时间序列预测 目录 多维时序 | MATLAB实现BO-CNN-LSTM贝叶斯优化卷积神经网络-长短期记忆网络多变量时间序列预测效果一览基本介绍模型搭建程序设计参考资料 效果一览 基本介绍 MATLAB实现BO-CNN-…

我看谁没看过

vue在新窗口打开页面方法 const { href } this.$router.resolve({path: "/officePlatform/addPrompt"});window.open(href, "_blank"); 添加圆形标志 h3::before {content: "";display: inline-block;width: 13px;height: 13px;background: va…

易点易动设备管理平台帮助化工企业实现设备高效管理

在现代化工企业中&#xff0c;设备管理和能耗监控是至关重要的。易点易动设备管理平台通过整合设备台账、巡检、维修、保养、备件管理、设备监控和能耗监控功能&#xff0c;为化工企业提供了一套全面、高效的解决方案。本文将详细介绍易点易动设备管理平台如何帮助化工企业实现…

JVM字节码分析

文章目录 1、类文件结构1.1、 魔数1.2、 版本1.3 、常量池1.4、 访问标识与继承信息1.5、 Field 信息1.6、 Method 信息1.7 、附加属性 2、字节码指令2.1、javap工具2.2、图解方法执行流程2.2.1 常量池载入运行时常量池2.2.2 方法字节码载入方法区2.2.3 main线程开始运行&#…

windows下另一种傻瓜式从零部署cuda环境的方式

前言 最近因为连续部署了两个深度学习环境&#xff0c;实在嫌烦了&#xff0c;于是摸索出一条简便的方式希望让人人都可以傻瓜式的快速部署&#xff0c;首先确保你的硬盘具有20G以上的空间&#xff0c;这里以部署torch的gpu版和让onnxruntime使用cuda加速为例&#xff0c;让我…

PDF.js源码使用总结

1、官网地址 pdf.js官网&#xff08;http://mozilla.github.io/pdf.js/&#xff09; pdf.js源码&#xff08;https://github.com/mozilla/pdf.js&#xff09; 版本选择&#xff1a;点击Tags 2、选择对应版本zip包下载、解压 在进行npm install之前 (注意&#xff1a;node.js…

【c++初阶】:引用

c入门 一.概念二.使用三.应用四.常引用五.引用与指针 一.概念 c语言中我们常用指针找地址&#xff0c;但在c中&#xff0c;忽略了指针&#xff08;当然也可以使用指针&#xff09;。常用引用这个概念。 二.使用 可以看到这里的b和c本质上都是a&#xff0c;只是不同的称呼罢了。…

【NestJs】数据库重构

上一篇文章详细了介绍nestjs 配置数据库&#xff0c;有不懂的小伙伴可以先查看上一篇文章【NestJs】使用连接mysql企业级开发规范在继续往下。 今天这一篇文章主要是针对配置数据库的重构&#xff0c;使用代码规范&#xff0c;方便后期维护。 当应用变得复杂 我们需要借用TypeO…

webstorm常用快捷键

webstorm作为前端代码JavaScript开发的利器&#xff0c;真的特别好用&#xff0c;我就总结一下我工作中经常用到的快捷键&#xff0c;有些快捷键是我自定义配置的&#xff0c;是以mac电脑来总结这篇文章的&#xff0c;请知晓&#xff1a; 自定义配置快捷键&#xff1a; 常用快…

SpringCloud源码探析(五)-网关Gateway的使用

1.概述 在微服务架构中&#xff0c;网关提供了统一的对外访问入口&#xff08;自身跨一个或多个服务&#xff09;&#xff0c;它保证了内部服务对外暴露的合理性与安全性、降低了服务之间访问的复杂性&#xff0c;是微服务架构中至关重要的一部分。在SpringCloud中网关主要包含…

让观众近距离感受如然之光 lipro智能家居成上海车展亮点之一

近段时间&#xff0c;上海国际车展如火如荼地举行&#xff0c;吸引了众多汽车厂商及相关企业参展。在本次展会上&#xff0c;星纪魅族集团也携手亿咖通科技&#xff0c;以联合参展的形式登陆「上海国际车展」 6.1号馆&#xff0c;共同展示智能汽车解决方案及产品创新。此外&…

第十四届蓝桥杯研究生组2023年省赛题解--全部采用Java语言实现

引言 今天现在这里 挖个坑&#xff0c;太忙了&#xff0c;这个专题不一样有时间补完&#xff0c;但我会尽力而为的。记录一下今天的日子&#xff1a;2023/04/21 看看这个坑要什么时候自己才能补完。 题目pdf下载&#xff1a;第十四届蓝桥杯研究生组pdf下载 在此特别感谢博主…

flac转换成mp3,4种方法教会你

怎么把flac转换成mp3&#xff1f;由于互联网技术的不断提升&#xff0c;我们每天接触到的各种音频格式变得越来越多样化。然而&#xff0c;有些特殊格式的音频会在处理时带来一定困难&#xff0c;因为它们的兼容性较差&#xff0c;不能在常用播放器上正常播放&#xff0c;这就给…

React面试题

React 如何创建一个react的项目&#xff08;使用脚手架&#xff09; 安装cr脚手架&#xff1a;npm install -g create-react-app进入文件夹&#xff1a;create-react-app 项目名称进入项目&#xff1a;cd 项目名称运行项目&#xff1a;npm start 如何不使用脚手架创建一个项…

maven打包学习

这篇文章不错&#xff1a; 思考&#xff1a;打包的时候是按照当前项目为标准打包的&#xff0c;那么所有的冲突都会以当前pom为根pom打包。那么&#xff0c;如果jar冲突&#xff0c;会用当前pom的依赖jar。 根据这个文章做了个有趣的实验&#xff1a; object3 //install 2个…

深度强化学习——第一次知识小结(3.5)

一、策略网络的小结&#xff1a; 重要概念回顾&#xff1a; 1、动作价值函数QΠ(st,at) 动作价值函数是未来奖励总和Ut的条件期望&#xff0c;如果已知了策略函数Π与当前的状态st&#xff0c;QΠ就可以对所有的动作a打分&#xff0c;以此来决定选择哪个a 其实顾名思义就是…

2023第14届蓝桥杯C/C++A组省赛题解

省一了&#xff0c;占个坑&#xff0c;今天晚上来补蓝桥的题 试题 A: 幸运数 本题总分&#xff1a;5 分 【问题描述】 小蓝认为如果一个数含有偶数个数位&#xff0c;并且前面一半的数位之和等于后面 一半的数位之和&#xff0c;则这个数是他的幸运数字。例如 2314 是…

ROC的理解

ROC 的由来 ROC 曲线是由混淆矩阵衍生来的指标。 混淆矩阵如图所示&#xff0c; 二ROC曲线的横坐标为 FPR&#xff0c;纵坐标为 TPR&#xff0c;计算公式分别是 F P R F P F P T N , 也就是 F P R F P F A L S E FPR \frac{FP}{FPTN}, 也就是 FPR \frac{FP}{FALSE} FP…

5天学会Linux C高级

day1 用C语言的理论知识点去推断结果 需求&#xff1a;让面试官知道你懂这个内容 一、C语言补充内容 【1】结构体补充内容&#xff1a; 1&#xff09;结构体.等法 结构体.等法代码 #include <stdio.h> struct student { int num; float score; char name[32…

docker镜像创建|实战案例(ssh|systemd|nginx|apache)

docker镜像创建|实战案例&#xff08;ssh|systemd|nginx|apache&#xff09; 一 Docker 镜像的创建1.基于现有镜像创建2基于本地模板创建3 基于Dockerfile 创建为什么Docker里的centos的大小才200M&#xff1f;DockerfileDocker 镜像结构的分层 4 Dockerfile 案例&#xff08;h…