温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

scala的Map和Tuple怎么使用

发布时间:2021-12-08 14:51:38 来源:亿速云 阅读:229 作者:iii 栏目:大数据

这篇文章主要讲解了“scala的Map和Tuple怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“scala的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

感谢各位的阅读,以上就是“scala的Map和Tuple怎么使用”的内容了,经过本文的学习后,相信大家对scala的Map和Tuple怎么使用这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI