Scala当中的Map 映射

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

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

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

  val map =Map[String,Int]("a"->100,"b"->200,("c",300),("c",400))

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

map.get("a")
map.get("aa")
map.get("a").get

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

map.get("aa").getOrElse("不存在")

在这里插入图片描述
获取所有的key,使用.keys方法,返回值的类型是一个 Iterable [String]
根据所获取的key值打印出所对应的value值

    map.keys.foreach(key => {
      println(map.get(key))
    })

在这里插入图片描述
俩个map映射合并
其中.++是表示将map1往map里面合并,即map1覆盖map,而原本的.++:是表示map往map1里面添加,map覆盖map1,但是在这里弹出警告:trait MapOps中的method++:已弃用(从2.13.0开始):对于Iterable类型的集合,请使用++而不是++:方法。

注: 如果一个包含 + 的表达式返回结果类型 String,而这并不是你所期望的结果。这可能是因为编译器认为这是该表达式唯一可行的解析方式,就把 + 两边的子表达式转为字符串,再相加。
在这里插入图片描述
可变长的Map,导入对应的Map包,使用put方法进行添加元素

    import scala.collection.mutable.Map
    val map = Map[String,Int]()
    map.put("a",4)
    map.put("b",7)
    map.foreach(println)

在这里插入图片描述
可变长度的map映射的filter过滤,当使用的是命令行的时候,没有换行输入的话,需要家伙少年宫分号进行隔开,在最后可以看到返回值的类型会是一个 scala.collection.mutable.Map[String,Int]

    map.filter(tp => {
      val key = tp._1
      val value = tp._2 
      value == 4
    })

在这里插入图片描述
其余的Map方法:如下表所示

序号方法名描述
1def ++(xs: Map[(A, B)]): Map[A, B]返回一个新的 Map,新的 Map xs 组成
2def -(elem1: A, elem2: A, elems: A*): Map[A, B]返回一个新的 Map, 移除 key 为 elem1, elem2 或其他 elems。
3def --(xs: GTO[A]): Map[A, B]返回一个新的 Map, 移除 xs 对象中对应的 key
4def get(key: A): Option[B]返回指定 key 的值
5def iterator: Iterator[(A, B)]创建新的迭代器,并输出 key/value 对
6def addString(b: StringBuilder): StringBuilder将 Map 中的所有元素附加到StringBuilder,可加入分隔符
7def addString(b: StringBuilder, sep: String): StringBuilder将 Map 中的所有元素附加到StringBuilder,可加入分隔符
8def apply(key: A): B返回指定键的值,如果不存在返回 Map 的默认方法
10def clone(): Map[A, B]从一个 Map 复制到另一个 Map
11def contains(key: A): Boolean如果 Map 中存在指定 key,返回 true,否则返回 false。
12def copyToArray(xs: Array[(A, B)]): Unit复制集合到数组
13def count(p: ((A, B)) => Boolean): Int计算满足指定条件的集合元素数量
14def default(key: A): B定义 Map 的默认值,在 key 不存在时返回。
15def drop(n: Int): Map[A, B]返回丢弃前n个元素新集合
16def dropRight(n: Int): Map[A, B]返回丢弃最后n个元素新集合
17def dropWhile(p: ((A, B)) => Boolean): Map[A, B]从左向右丢弃元素,直到条件p不成立
18def empty: Map[A, B]返回相同类型的空 Map
19def equals(that: Any): Boolean如果两个 Map 相等(key/value 均相等),返回true,否则返回false
20def exists(p: ((A, B)) => Boolean): Boolean判断集合中指定条件的元素是否存在
21def filter(p: ((A, B))=> Boolean): Map[A, B]返回满足指定条件的所有集合
22def filterKeys(p: (A) => Boolean): Map[A, B]返回符合指定条件的的不可变 Map
23def find(p: ((A, B)) => Boolean): Option[(A, B)]查找集合中满足指定条件的第一个元素
24def foreach(f: ((A, B)) => Unit): Unit将函数应用到集合的所有元素
25def init: Map[A, B]返回所有元素,除了最后一个
26def isEmpty: Boolean检测 Map 是否为空
27def keys: Iterable[A]返回所有的key/p>
28def last: (A, B)返回最后一个元素
29def max: (A, B)查找最大元素
30def min: (A, B)查找最小元素
31def mkString: String集合所有元素作为字符串显示
32def product: (A, B)返回集合中数字元素的积。
33def remove(key: A): Option[B]移除指定 key
34def retain(p: (A, B) => Boolean): Map.this.type如果符合满足条件的返回 true
35def size: Int返回 Map 元素的个数
36def sum: (A, B)返回集合中所有数字元素之和
37def tail: Map[A, B]返回一个集合中除了第一元素之外的其他元素
38def take(n: Int): Map[A, B]返回前 n 个元素
39def takeRight(n: Int): Map[A, B]返回后 n 个元素
40def takeWhile(p: ((A, B)) => Boolean): Map[A, B]返回满足指定条件的元素
41def toArray: Array[(A, B)]集合转数组
42def toBuffer[B >: A]: Buffer[B]返回缓冲区,包含了 Map 的所有元素
43def toList: List[A]返回 List,包含了 Map 的所有元素
44def toSeq: Seq[A]返回 Seq,包含了 Map 的所有元素
45def toSet: Set[A]返回 Set,包含了 Map 的所有元素
46def toString(): String返回字符串对象
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Modify_QmQ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值