Scala映射与元组篇
*Scala有十分易用的语法来创建、查询和便利映射
*你需要从可变的和不可变的映射中做出选择
*默认情况下,你得到的是一个哈希映射,不过你也可以指明要树形映射
*你可以很容易地在Scala映射和Java映射之间来回切换
*元组可以用来聚集值
构造映射
val scores=Map("Alice"->10,"Bob"->3,"zhangzhilong"->9,"huyanan"->11)
上述代码构造出一个不可变的Map[String,Int]其值不可改变。如果你想要一个可变映射,则用
val scores=scala.collection.mutable.Map("Alice"->10,"Bob"->3,"zhangzhilong"->9,"huyanan"->11)
如果想从一个空的映射开始,你需要选定一个映射实现并给出类型参数
val scores=new scala.collection.mutable.HashMap[String,Int]
在Scala中,映射是对偶的集合。对偶简单的说就是两个值构成的组,这两个值并不一定是同一个类型的,比如("Alice",10)
->操作符用来创建对偶
"Alice"->10
产出值为:
("Alice",10)
你也可以完全用另一种方式定义映射
val scores=Map(("Alice",10),("Bob",3),("Cindy",8))
只不过->操作符看上去比圆括号易读那么一点,也更符合大家对于映射的直观感受
映射这种数据结构是一种将键映射到值的函数。区别在于通常的函数计算值,而映射只是做查询
获取映射中的值
使用()表示法查找某个键对应的值
val bobsScore=score("Bob")//类似于Java中的scores.get("Bob")
如果映射并不包含请求中使用的键,则会抛出异常
要检查映射中是否包含某个指定的键,啧可以用contains方法
val bobsScore=if(scores.contains("Bob")) SCORES("Bob") else 0
由于这样的组合调用十分普遍,以下是一个快捷写法:
val bob=scores.getOrElse("Bob",0)//如果映射包含键"Bob",返回对应的值,否则返回0
最后。映射.get(键)这样的刁颖返回一个Option对象,要么是Some(键对应的值),要么是None
更新映射中的值
跟新某个映射的值或者添加一个新的映射关系:
在=左侧使用()
scores("Bob)=10//更新或增加键“Bob”对应的值(假定scores是可变的)
或者使用 +=操作来添加多个关系:
scores +=("Bob"->10)
要溢出某个键和对应的值,使用-=操作符
scores-="Alice"
你不能更新一个不可变的映射,但你可以做一些同样有用的操作——获取一个包含所需要的更新的新映射:
val newScores = scores + ("Bob"->10)//更新过的新映射(如果是两个scores这样的映射的话用++相连)


newSores映射包含了于scores相同的映射关系,此外“Bob“被更新,”Fred“被添加了进来
同理要从不可变易守难攻he中移除某个键,你可以用-操作符来获取一个新的去掉该键
scores=scores-“Alice”
迭代映射
for((k,v)<-映射)处理k和v
只访问k或者v
for (v<- scores.values)println(v)
k,v交换位置
for((k,v)<-映射)yeild (v,k)
已排序映射
顺序访问所有键(属性映射)
val scores=scala.collection.immutable.SortedMap(“Alice”->10,"huyanan"->8)
元组
映射是键/值对偶的集合。对偶是元组的最简单形态——元组是不同类型的值的聚合
例如(1,3.14,"zhangzhilong")
是一个元组,类型为Tuple3[Int,Double,String]
类的定义也可以写为
(Int,Double,java.lang.String)
如果你有一个元组,比如:
val t=(1,3.14,"fred")
和数组或字符串中的位置不同,元组的各族从1开始而不是0
通常,使用模式匹配来获取元组的组元,例如
val (first,second,third)=t//将first设为1 second设为3.14 third设为“Fred”
如果不是所有的部件都需要,那么可以再不需要的部件位置上使用_
val (first,second,_)=t
元组可用于函数需要返回不止一个值的情况。如StringOps的partition方法返回的是一对字符串,分别包含了满足某个条件和不满足该条件的字符
"NewYork".partition(_.isUpper)//输出对偶("NY","ew ork")
拉链操作
多个值绑在一起,以便能够一起被处理 通常用zio方法完成
val arr1=Array("<","=",">")
val arr2=Array(2,10,2)
val pairs=arr1.zip(arr2)
输出对偶的数组:
Array((<,2), (=,10), (>,2))
然后这些对偶就可以一起被处理
for((s,n)<-pairs) Console.print(s*n)//会打印<<==========>>
Scala映射与元组篇的更多相关文章
- 【scala】 scala 映射和元组操作(四)
1.映射 Map 定义 ,取值,遍历,排序 2. 元组 定义,取值,拉链操作 import scala.collection.mutable /** * 映射和元组 * * @author xwol ...
- scala映射和元组
scala映射,是一对键值对,相当于java中的Map 对偶:由两个值构成的组,形式 : 值1->值2,值1和值2类型不一定要相同,可以理解为对偶就是一个key/value 映射就是对偶的集合 ...
- Scala学习(四)---映射和元组
映射和元组 摘要: 一个经典的程序员名言是:"如果只能有一种数据结构,那就用哈希表吧".哈希表或者更笼统地说映射,是最灵活多变的数据结构之一.映射是键/值对偶的集合.Scala有一个通用的叫法:元组, ...
- 学好Spark/Kafka必须要掌握的Scala技术点(一)变量、表达式、循环、Option、方法和函数,数组、映射、元组、集合
前言 Scala是以JVM为运行环境的面向对象的函数式编程语言,它可以直接访问Java类库并且与Java框架进行交互操作.正如之前所介绍,Spark是用Scala语言编写的,Kafka server端 ...
- Scala从入门到精通之四-映射和元组
在Scala中映射之键值对的集合,元组是n个对象的聚集,但是对象的类型不一定相同 本节内容要点 Scala中映射的创建,遍历和查询 如何从可变和不可变映射中做出选择 Scala映射和Java映射见的互 ...
- 快学Scala习题解答—第四章 映射和元组
4 映射和元组 4.1 设置一个映射,当中包括你想要的一些装备,以及它们的价格.然后构建还有一个映射.採用同一组键,可是价格上打9折 映射的简单操作 ,"gun"->18 ...
- Scala的映射和元组操作
映射和元组操作 构造Map // 构造一个不可变的MAP映射,类似与key -> value这样的组合叫做对偶 val score = Map("Jack" -> 12 ...
- scala学习笔记(4)映射和元组
1.构造映射 //构造这样的一个映射 val sources=Map(,,) //构造了一个不可变的Map[String,Int],值不能改变, //可变映射 val scores = new sca ...
- Scala从入门到放弃(三)Scala的数组、映射、元组和集合
1.数组 1.1定长数组和变长数组 object ArrayDemo { def main(args: Array[String]): Unit = { //初始化一个长度为8的定长数组,其数组元素均 ...
随机推荐
- 【winform】splitContainer拆分器控件
一. 1.panel的显示和隐藏 设置SplitterDistance的数值大小即可改变panel的左右大小.这里设置的数值是指分割线距离左边框的像素,设置成0的话,左半部分就完全看不到了,可以实现一 ...
- react context跨组件传递信息
从腾讯课堂看到的一则跨组件传递数据的方法,贴代码: 使用步骤: 1.在产生参数的最顶级组建中,使用childContextTypes静态属性来定义需要放入全局参数的类型 2.在父组件中,提供状态,管理 ...
- ceph添加osd(ceph-deploy)
修改主机名和 /etc/hosts 关闭防火墙和 SELINUX 安装和配置 NTP ceph-deploy 节点安装 安装 ceph-deploy sudo yum install ceph-dep ...
- redis使用总结(二)(jedis使用)
Jedis使用(Jedis中的API和redis的指令基本相同) 1.创建maven工程,在pom文件中导入jedis的坐标 <dependency> <groupId>red ...
- Ubuntu 无界面使用selenium chrome + headless
1. 安装 selenium : sudo pip install selenium 2. 安装 chromdriver: 进入 淘宝镜像源 下载 chromdriver, 可以查看 notes.tx ...
- Linux学习方法和心态
如果单纯是为了架站,那我就可以毕业了. 成就感+兴趣=学习的动力. 不同的环境下,解决问题的办法有很多种,只要行得通,都是好方法. Distribution 安装 熟悉Shell环境 Shell脚本 ...
- linux系统ansible一键完成三大服务器基础配置(剧本)
ansible自动化管理剧本方式一键完成三大服务器基础配置 环境准备:五台服务器:管理机m01:172.16.1.61,两台web服务器172.16.1.7,172.16.1.8,nfs存储服务器17 ...
- shell编程(五)之函数
function:函数 函数只有被调用才会执行如何调用:给定函数名 函数名出现的地方,会被自动替换为函数代码 函数的生命周期:被调用时创建,返回时终止return命令返回自定义状态结果 0:成功 1- ...
- 使用tp访问数据库时提示错误: 'PDO' not found, 和not defined constant mysql_attr_init_command 和call an undefined function Think\Template\simpleXml_load_string()函数
第一个问题: PDO not found 是因为 php没有安装pdo扩展, 无法提供给 php 以 数据库访问功能, 所以 报错是在文件: Think/Db.class.php的里面. 解决方法是: ...
- 【新特性】JDK11
随着JDK11正式发布,带来了许多新的特性.本文主要介绍JDK11的部分新特性和新的API. 一.Local Var 在Lambda表达式中,可以使用var关键字来标识变量,变量类型由编译器自行推断. ...