【快速上手scala】(五)Map和Tuple

情到浓时终转凉″ 提交于 2020-12-04 03:53:51

目录

  • Map基本操作

  • Tuple元组


一、Map基本操作
scala的Map和java一样,是一种key->value的数据结构

//新建一个不可变的Map
scala> val person = Map("xiaoli"->15,"xiaofang"->18)
person: scala.collection.immutable.Map[String,Int] = Map(xiaoli -> 15, xiaofang -> 18)

scala> person("xiaoli")
res1: Int = 15

//接下来创建一个可变的Map
scala> val person = scala.collection.mutable.Map("xiaoli"->15,"xiaofang"
->18)
person: scala.collection.mutable.Map[String,Int] = Map(xiaoli -> 15, xiaofang -> 18)

scala> person("xiaofang")
res3: Int = 18

//我们也可以这样创建Map
scala> val person = Map(("xiaoxiao",22),("xiaowang",30))
person: scala.collection.immutable.Map[String,Int] = Map(xiaoxiao -> 22, xiaowang -> 30)

//如果要获取Map的value,可以这样获取
scala> val xiaowangAge = person("xiaowang")
xiaowangAge: Int = 30

//但是如果没有“xiaowang”这个人的话会报错,所以我们可以先检测Map是否存在,不存在的话返回0
scala> val xiaowangAge = if(person.contains("xiaowang111"))person("xiaowang") else 0
xiaowangAge: Int = 0

//上面这样的操作很常见,所以scala内置了一个方法getOrElse可以打成一样的效果
scala> val xiaoxxiaoAge = person.getOrElse("xiaoxiao",0)
xiaoxaioAge: Int = 22

scala> val xiaoxiaoAge = person.getOrElse("xiaoxiao111",0)
xiaoxaioAge: Int = 0

//增加元素,因为不可变Map无法进行一些操作,所以我们重新创建一个可变的Map
scala> val person = scala.collection.mutable.Map("xiaoli"->15,"xiaofang"->18)
person: scala.collection.mutable.Map[String,Int] = Map(xiaoli -> 15, xiaofang -> 18)

scala> person += ("xiaopang"->13)
res10: person.type = Map(xiaoli -> 15, xiaopang -> 13, xiaofang -> 18)

//更新元素
scala> person("xiaopang") = 14

scala> person("xiaopang")
res12: Int = 14

//删除元素
scala> person -= "xiaoli"
res13: person.type = Map(xiaopang -> 14, xiaofang -> 18)

//那么如果就是不可变的Map就没办法操作了吗?也不是,只不过会在原Map的基础上创建新的Map
//比如这个增加元素
scala> val person2 = person+("xiaoshou"->17)
person2: scala.collection.mutable.Map[String,Int] = Map(xiaopang -> 14, xiaoshou -> 17, xiaofang -> 18)

//删除元素
scala> val person3 = person2 - "xiaoshou"
person3: scala.collection.mutable.Map[String,Int] = Map(xiaopang -> 14, xiaofang -> 18)

上面都是Map的基础操作,那么该如何遍历Map呢?

//1.遍历key
scala> for(key <- person.keySet)println(key)
xiaopang
xiaofang

//2.遍历value
scala> for(value <- person.values)println(value)
14
18

//3.遍历key和value
scala> for((key,value)<-person)println(key+" "+value)
xiaopang 14
xiaofang 18

scala支持两个数组合并为Map,代码如下

scala> val names = Array("xiaoxiao","xiaopang")
names: Array[String] = Array(xiaoxiao, xiaopang)

scala> val ages = Array(18,15)
ages: Array[Int] = Array(18, 15)

//这是合并代码,用zip方法来合并
scala> val person = names.zip(ages)
person: Array[(String, Int)] = Array((xiaoxiao,18), (xiaopang,15))

scala> for((key,value)<- person)println(key+" "+value)
xiaoxiao 18
xiaopang 15

二、Tuple元组  

想象一下,有时候一个可能需要返回多个对象,对象类型一致还好,不一致的话就需要强转,这样并不安全,定义dto来应对各种情况也可以,但这也不是一个好的方式,重用率太低了,这时候就需要tuple这个特殊的数据结构,那么什么是tuple元组呢?
元组是不同类型的数据组成的线性集合,比如:

scala> val tup = ("li",20,185)
tup: (String, Int, Int) = (li,20,185)

//可以这样访问tuple元素
scala> tup._1
res20: String = li

scala> tup._2
res21: Int = 20

本文到此就结束啦,原创不易,喜欢的话点个关注呗



本文分享自微信公众号 - Spark学习指南(smartProgram)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!