Scala中的映射、获取映射中的值、getOrElse、Scala中的元组Tuple、创建元组、toMap、拉链操作zip、zipAll 06

1. Scala中的映射

  1. 构建映射格式
  • val map = Map(键 -> 值,键 -> 值…)
  • 利用元组构建 val map = Map((键,值),(键,值),(键,值))
scala> val scores = Map("tom" -> 85, "jerry" -> 99, "kitty" -> 90)
scores: scala.collection.immutable.Map[String,Int] = Map(tom -> 85,jerry -> 99, kitty -> 90)
  1. 获取和修改映射中的值
  • 获取映射中的值:值=map(键)
scala> val scores = Map(("tom",85),("jerry",99),("kitty",90))
scores:scala.collection.immutable.Map[String,Int] = Map(tom -> 85,jerry -> 99, kitty -> 90)

//获取某一个键对应的值
scala> scores("jerry")
res0:Int = 99
  • 好用的getOrElse,如果映射中有值,返回映射中的值,没有就返回默认值,调用的getOrElse时会给他一个返回的默认值。
scores.getOrElse("suke",0)
res2:Int = 0
  • 注意:在Scala中,有两种Map,一个是immutable包下的Map,该Map中的内容不可变;另一个是mutable包下的Map,该Map中的内容可变
  • 通常我们在创建一个集合时会用val这个关键字修饰一个变量(相当于java中的final),那么就意味着该变量的引用不可变,该引用中的内容是不是可变,取决于这个引用指向的集合类型。
//首先导入mutable包,内容可变的集合
scala> import scala.collection.mutable.Map 
import scala.collection.mutable.Map
//val定义的scores变量意味着变量的引用不可变,但是Map中的内容是可变的
scala> val scores = Map("tom" -> 80, "jerry" -> 99)
scores: scala.collection.mutable.Map[String,Int] = Map(tom -> 80, jerry -> 90)
//修改Map中的内容
scala> scores("tom") = 88
scala> scores += ("kitty" -> 99, "suke" -> 60)
scala> res9: scores.type = Map(tom ->88, kitty -> 99, jerry -> 99, suke -> 60)

2. Scala中的元组

映射时K/V对偶的集合,对偶是元组的最简单形式,元组可以装有多个不同类型的值

2.1 创建元组

  • 元组是不同类型的值的聚集,对偶是最简单的元组。
  • 元组表示通过将不同的值用小括号括起来,即表示元组。
    创建元组格式:
    val tuple = (元素,元素…)
//定义元组时用小括号将多个元素包起来,元素之间用逗号分隔,元素的类型可以不一样,元素个数可以任意多个
scala> val t = ("hadoop", 3.14, 65535)
t: (String,Double,Int) = (hadoop,3.14,65535)

2.2 获取元组中的值

  1. 获取元组中的值格式:
    使用下划线加加脚标,例如t._1, t._2, t._3
    注意:元组中的元素脚标是从1开始的。
scala> val t = ("hadoop",3.14,65535)
t:(String,Double,Int) = (hadoop,3.14,65535)
//获取元组中的元素可以使用下划线加上脚标,但是需要注意的是元组中的元素脚标是从1开始的
scala> t._1
res18: String = hadoop

scala> t._2
res119: Double = 3.14

scala> t._3
res20: Int = 65535 

2.3 将对偶的集合转换成映射

  • 将对偶的集合转换成映射:
    调用其toMap方法
val arr = Array(("tom",88),("jerry",95))
arr: Array[(String,Int)] = Array((tom,88),(jerry,95))

//toMap可以将对偶的集合转换成映射
scala> arr.toMap
res2: scala.collection.immutable.Map[(String,Int)] = Map(tom -> 88,jerry -> 95)

2.4 拉链操作

  1. 使用zip 命令可以将多个值绑定在一起
scala> val scores = Array(88,95,80)
scores: Array[Int] = Array(88,95,80)

scala> val names = Array("zhangsan","lisi","wangwu")
names: Array[String] = Array(zhangsan,lisi,wangwu)

scala> val scores = Array(88,95,80)
scores: Array[Int] = Array(88,95,90)

//使用zip将对应的值进行捆绑
scala> names.zip.(scores)
res8: Array[(String,Int)] = Array((zhangsan,88),(lisi,95),(wangwu,80))
  • 注意: 如果两个数组的元素个数不一致,拉链操作后生成的数组的长度为较小的那个数组的元素个数
  • 如果其中一个元素的个数比较少,可以使用zipAll用默认的元素填充
scala > val names = Array("zhangsan", "lisi","wangwu")
names: Array[String] = Array(zhangsan,lisi,wangwu)

scala> val scores = Array(88,95)
scores: Array[Int] = Array(88,95)

//调用zipAll,对元素少的进行填充
scala> names.zipAll(scores,"zhaoliu",100)
res12: Array[(String,Int)] = Array((zhangsan,88),(lisi,95),(wangwu,100))
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值