scala映射和元组

本文介绍了Scala中映射(Map)的创建、查询和更新,包括可变与不可变映射的使用,以及元组的构建和应用。映射可以通过键值对(key->value)的形式创建,元组可以容纳不同类型的元素。文章还讨论了如何向映射添加元素,以及如何通过get方法安全地访问映射中的值。此外,还提到了拉链操作(zip)和元组解构,以及如何将拉链后的对偶集合转化为映射。
摘要由CSDN通过智能技术生成


Scala有十分易用的语法来创建、查询和便利映射,你需要从可变的和不可变的映射中做出选择。默认情况下,你得到的是一个哈希映射,不过你也可以指明要树形映射。

你可以很容易地在Scala映射和Java映射之间来回切换元组可以用来聚集值。

映射与元组

映射(Map)是一种可迭代的键值对结构(也称映射或关联)。Scala的Predef类提供了隐式转换,允许使用另一种语法:key -> value,来代替(key, value)。如:Map("x" -> 24, "y" -> 25, "z" -> 26)等同于Map(("x", 24), ("y", 25), ("z", 26)),却更易于阅读。
  与列表一样,元组也是不可变的,但与列表不同的是元组可以包含不同类型的元素,元组的值是通过将单个的值包含在圆括号中构成的,如val t = (1, 3.14, "Fred")

构建及更新映射

scala映射,是一对键值对,相当于java中的Map

对偶:由两个值构成的组,形式 : 值1->值2,值1和值2类型不一定要相同,可以理解为对偶就是一个key/value

映射就是对偶的集合

val scores = Map("Jim"->10, ("Tom",20), "Sam"->44)  //声明一个不可变映射,命名为scores
val s = scala.collection.mutable.Map("Jim"->10, ("Tom",20), "Sam"->44) //声明一个可变映射,使用了两种方法声明了映射中的元素,第一种为Key->Value的形式,第二种为(Key,Value)的形式
val s1 = new scala.collection.mutable.HashMap[String, Int] //声明一个空的可变映射,并设置Key为String类型变量,Value为Int型变量
s.+=(("Lily"->10)) //向s映射添加元素:("Lily"->10)
s1.+=(("Jim"->10)) //向s1映射添加元素:("Jim"->10)
println(scores)
println(s)
println(s1)

查看映射中的值

映射的 get 方法返回的是一个 Option 类对象,要么是 Some,要么是 None

// 声明一个不可变映射
val scores = Map("Jim"->10, ("Tom",20), "Sam"->44) 
// 将scores映射中键名为‘Lily’的值赋给变量score1,由于scores映射不存在该键,程序将会报错
val score1 = scores("Lily")
// 将scores映射中键名为'Tom'的值赋给变量score2,如果该键不存在,将会赋给score变量0值
val score2 = scores.getOrElse("Tom",0) 
// 同第三条语句原理一样,将键名对应的键提取出来,如果不存在,则返回一个缺省值
val score3 = scores.getOrElse("Lily",0)  

构建元组

映射是键/值对偶的集合。对偶是元组的最简单形态——元组是不同类型的值的聚合。

元组是不同类型的值的聚集,对偶是元组的最简单的实现

val tuple = (1, 3.14, "Hello") //构建一个元组,类型为Tuple3(Int, Double, String)
println(tuple._1) //输出元组第一个元素,需要注意,元组的下标是从1开始的
val(first, second, _) = tuple //直接获取元组前两个元素

如果不是每一个组员都需要,可以在不需要的位置使用_

注意:元组的下标是从1开始的

拉链操作

使用元组的原因之一是把多个值绑定在一起,以便他们能够被统一处理,这通常可以用zip方法来完成。

val symbols = Array("<","-",">")
val count = Array(2,10,2)
val pairs = symbols.zip(count)

输出结果为:pairs: Array[(String, Int)] = Array((<,2), (-,10), (>,2))

然后可以对输出结果作统一的处理:

for((s,n) <- pairs) Console.print( s * n)

输出结果:<<---------->>

toMap方法可以对偶集合转化为映射。

symbols.zip(count).toMap
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

码上行舟

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

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

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

打赏作者

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

抵扣说明:

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

余额充值