Scala中的Map 集合详解

news/2024/11/28 10:49:31/

目录

一、不可变长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").getprint(value1)

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

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

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

    //keys:获取map所有的keyval keys: Iterable[String] = map.keys//遍历每个key,获取对应的valuekeys.foreach(key =>{val value3: Int = map.get(key).getprint(s"key is $key , value is $value3")})
//values:获取map中所有的valueval values: Iterable[Int] = map.valuesvalues.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.Mapval 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返回keyval value = tp._2 //._2返回valuevalue == 200})result3.foreach(println)

三、Map的其他方法

 


http://www.ppmy.cn/news/48800.html

相关文章

燃气管道定位83KHZ地下电子标识器探测仪ED-8000操作指南

1、电子标识器探测工作 燃气管道定位83KHZ地下电子标识器探测仪ED-8000&#xff0c;探测时周边 3 米范围内不能有其他探测仪&#xff0c;保持探测仪垂直向 下&#xff0c;探测仪的末端距离地面 5~10cm 左右&#xff0c;延估计的埋地管线走向水平移动探测仪。当发现持续信号且信…

Doo Prime 德璞资本:股指期货交易如何管理好个人情绪

在股指期货交易中&#xff0c;我们可以感觉到心态随着交易的成败而变化。有时心态对交易影响不大&#xff0c;但有时影响很大&#xff0c;一个好的心态&#xff0c;能够应对各种变化&#xff0c;各种损益和市场判断的正确和错误&#xff0c;不会对心态产生很大的影响&#xff0…

GPT对SaaS领域有什么影响?

GPT火了&#xff0c;Chat GPT真的火了。 突然之间&#xff0c;所有人都在讨论AI&#xff0c;最初的访客是程序员、工程师、AI从业者&#xff0c;从早高峰写字楼电梯里讨论声&#xff0c;到村里大爷们的饭后谈资&#xff0c;路过的狗子都要和它讨论两句GPT的程度。 革命的前夜…

理解什么是DTO?什么是AutoMapper?

什么是DTO? .Net DTO是一个对象&#xff0c;它定义了数据如何在网络上发送。它只用于发送和接收数据&#xff0c;不包含任何业务逻辑。使用DTO的原因有以下几个&#xff1a; 将服务层与数据库层分离隐藏客户端不需要查看的特定属性省略一些属性以减少有效负载大小处理嵌套对象…

银行数字化转型导师坚鹏:商业银行数字化风控(1天)

商业银行数字化风控 课程背景&#xff1a; 数字化背景下&#xff0c;很多银行存在以下问题&#xff1a; 不清楚商业银行数字化风控发展现状&#xff1f; 不清楚对公业务数字化风控工作如何开展&#xff1f; 不知道零售业务数字化风控工作如何开展&#xff1f; 课程特色…

zookeeper一文精通

目录 zookeeper是树形文件存储&#xff01; zookeeper集群是如何确保写入成功的&#xff1f; zookeeper集群为什么是CP&#xff1f; 选举leader也是半数同意 zookeeper集群是如何访问数据的&#xff1f; zookeeper是如何保证选举的从节点是拥有最新的数据的节点&#xff1…

( “树” 之 前中后序遍历) 145. 二叉树的后序遍历 ——【Leetcode每日一题】

基础概念&#xff1a;前中后序遍历 1/ \2 3/ \ \ 4 5 6层次遍历顺序&#xff1a;[1 2 3 4 5 6]前序遍历顺序&#xff1a;[1 2 4 5 3 6]中序遍历顺序&#xff1a;[4 2 5 1 3 6]后序遍历顺序&#xff1a;[4 5 2 6 3 1] 层次遍历使用 BFS 实现&#xff0c;利用的就是 BFS…

二维码图片生成工具C#winform源码

二维码图片生成工具C#winform源码 源码描述&#xff1a; 一、源码特点 采用winform进行开发,生成二维码并保存&#xff0c;欢迎下载 二、功能介绍 本源码是一个可以自动生成二维码图片的小模块&#xff0c;可以添加自己的logo图片&#xff0c;可以保存在自己想要保存的地方 …