*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映射与元组篇的更多相关文章

  1. 【scala】 scala 映射和元组操作(四)

    1.映射  Map 定义 ,取值,遍历,排序 2. 元组 定义,取值,拉链操作 import scala.collection.mutable /** * 映射和元组 * * @author xwol ...

  2. scala映射和元组

    scala映射,是一对键值对,相当于java中的Map 对偶:由两个值构成的组,形式 : 值1->值2,值1和值2类型不一定要相同,可以理解为对偶就是一个key/value 映射就是对偶的集合 ...

  3. Scala学习(四)---映射和元组

    映射和元组 摘要: 一个经典的程序员名言是:"如果只能有一种数据结构,那就用哈希表吧".哈希表或者更笼统地说映射,是最灵活多变的数据结构之一.映射是键/值对偶的集合.Scala有一个通用的叫法:元组, ...

  4. 学好Spark/Kafka必须要掌握的Scala技术点(一)变量、表达式、循环、Option、方法和函数,数组、映射、元组、集合

    前言 Scala是以JVM为运行环境的面向对象的函数式编程语言,它可以直接访问Java类库并且与Java框架进行交互操作.正如之前所介绍,Spark是用Scala语言编写的,Kafka server端 ...

  5. Scala从入门到精通之四-映射和元组

    在Scala中映射之键值对的集合,元组是n个对象的聚集,但是对象的类型不一定相同 本节内容要点 Scala中映射的创建,遍历和查询 如何从可变和不可变映射中做出选择 Scala映射和Java映射见的互 ...

  6. 快学Scala习题解答—第四章 映射和元组

    4 映射和元组  4.1 设置一个映射,当中包括你想要的一些装备,以及它们的价格.然后构建还有一个映射.採用同一组键,可是价格上打9折 映射的简单操作  ,"gun"->18 ...

  7. Scala的映射和元组操作

    映射和元组操作 构造Map // 构造一个不可变的MAP映射,类似与key -> value这样的组合叫做对偶 val score = Map("Jack" -> 12 ...

  8. scala学习笔记(4)映射和元组

    1.构造映射 //构造这样的一个映射 val sources=Map(,,) //构造了一个不可变的Map[String,Int],值不能改变, //可变映射 val scores = new sca ...

  9. Scala从入门到放弃(三)Scala的数组、映射、元组和集合

    1.数组 1.1定长数组和变长数组 object ArrayDemo { def main(args: Array[String]): Unit = { //初始化一个长度为8的定长数组,其数组元素均 ...

随机推荐

  1. Log4j2 简介

    介绍 Log4j2是Log4j的升级版,与之前的版本Log4j 1.x相比.有重大的改进,修正了Logback固有的架构问题的同事,改进了许多Logback所具有的功能. 特性 一.API 分离 Lo ...

  2. Caravel–一款开源OLAP+数据可视化分析前端工具,支持Druid和Kylin

    参考此文:http://lxw1234.com/archives/2016/06/681.htm

  3. jenkins+git+maven

    这个有参考:https://blog.csdn.net/xlgen157387/article/details/50353317 主要针对一些错误记录一下 1.如果要不想用系统的jdk等,可以在全局工 ...

  4. 4.产生10个1-100的随机数,并放到一个数组中 (1)把数组中大于等于10的数字放到一个list集合中,并打印到控制台。 (2)把数组中的数字放到当前文件夹的numArr.txt文件中

    package cn.it.text; import java.io.FileWriter; import java.io.IOException; import java.util.ArrayLis ...

  5. 类成员(static)和final修饰符

    在Java类里只能包含成员变量.方法.构造器.初始化块.内部类(包括接口.枚举)5种成员,类成员是用static来修饰的,其属于整个类. 当使用实例来访问类成员时,实际上依然是委托给该类来访问类成员, ...

  6. 编译原理 #02# 简易递归下降分析程序(js实现)

    // 实验存档 截图: 代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"&g ...

  7. psutil的几个例子

    python进行系统相关操作时都有点力不从心,尤其是windows下,比如获取进程的cpu.内存等等,可以通过以下方法可以达到这种要求: 1.安装pywin32.psutil这种第三方库,里面提供了很 ...

  8. Exp4 恶意代码分析 20164303 景圣

    Exp4 恶意代码分析 实验内容 实验点一:系统运行监控 (1)使用如计划任务,每隔一分钟记录自己的电脑有哪些程序在联网,连接的外部IP是哪里.运行一段时间并分析该文件,综述一下分析结果.目标就是找出 ...

  9. rabbitmp安装记录

    第一次安装一路遇坑,安装步骤及问题如下 1:安装erlang依赖 yum -y install make gcc gcc-c++ kernel-devel m4 ncurses-devel opens ...

  10. bug日记之-------java.io.IOException: Server returned HTTP response code: 400 for URL

    报的错误 出事代码 出事原因 解决方案 总结 多看源码, 我上面的实现方式并不好, 如果返回的响应编码为400以下却又不是200的情况下getErrorStream会返回null, 所以具体完美的解决 ...