1.构造映射

//构造这样的一个映射
val sources=Map("Alice"->,"Bob"->,"Cindy"->)  //构造了一个不可变的Map[String,Int],值不能改变,

//可变映射

val scores = new scala.collection.mutable.HashMap[String,Int]
//映射是对偶的集合。简单来说就是两个值构成的组,这两个值不一定适合同一类型的,如("Alice",10)。->操作符用来创建对偶:
"Alice"-> 改代码产出的值是:("Alice",)

2.获取映射中的值:在scala中,函数和映射之间的相似性尤为明显,因为用()表示法来查找某个键对应的值

val bobsScore = if (scores.contains("Bob")) scores("Bob") else 0
val bobSource=sources("Bob")    //类似于Java中的sources.get("Bob"),如果映射中不包含请求中使用的键值,就会抛出异常
  创建可变map
  scala>val map = new scala.collection.mutable.HashMap[Int,Int]
  scala>val map = new scala.collection.mutable.HashMap[Int,Int]()  //调用apply方法 3.更新映射中的值,在可变映射中,可以更新某个映射的值,或者添加一个映射关系,做法是在=号左侧使用():
  scores("bob")=10    //更新"bob"对应的值
  scores("Fred")=7    //更新新的键值对/值对偶到scores(假定是可变的)
  scores+=("Bob"->10,"Fred"->7)  //通过+=操作添加多个关系
  scores-="Alice"          //通过-=移除某个键值对 
  
  val newScores = scores+("Bob"->10,"Fred"->7)  //更新过的新映射,newScores映射包含了与scores相同的映射关系
  并且"Bob"也被更新,"Fred"被添加进来了   var scores=....
  scores =scores+("Bob"->10,"Fred"->7)  //更新var变量   要从不可变映射中移除某个键,需要用-操作符来获取一个新的去掉该映射:
    scores =scores -"Alice"
 4.迭代操作
  
for((k,v)<-映射)    //循环遍历映射中的所有键值对偶
scores.keySet //一个类似Set("Bob","Cindy","Fred","Alice")这样的集合
for(v<-scores.values) println(v) //将打印10 8 7 10 for((k,v)<- 映射) yield(v,k) //翻转一个映射,交换键和值的位置

  5.已排序映射

    得到一个不可变的树形映射

val scores = scala.collection.immutable.SortedMap("Alice"->10,"Fred"->7,"Bob"->3,"Cindy"->8)

  6.与java的互操作

import scala.collection.JavaConversions.mapAsScalaMap //通过制定的scala映射类型来触发转换
val scores:scala.collection.mutable.Map[String,Int0=new java.util.TreeMap[String,Int] import scala.collection.JavaConversions.propertiesAsScalaMap
val props :scala.collection.map[String,String]=System.getProperties

  7.元组

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

    元组的值是通过将的单个的值包含在圆括号中构成的:(1,3.14,"Fred")是一个元组,类型为Tuple3[Int,Double,java.lang.String]
    类型定义也可以写为(Int,Double,java.lang.String)
    eg:val t = (1,3.14,"Fred")  可以通过_1、_2、_3访问其元组
      val second =t._2    //将second设置为3.12  ,这个地方可以把t._2写为t _2(用空格而不是句点),但是不能写成t_2.
    
    使用模式匹配的方式来获取元组的组元,如:val (first,second,thrid)=t  //将first设置为1,second设置为3.14,thrid设置为为"Fried"
    如果不是所有的部件都需要,那么可以在不需要的部件上用_:val (first,sceond,_)=t     元组可以用于函数需要返回不止一个值的情况。维数最高22
    元组tuple scala>val t = (1,"tom",12)
 8.拉链操作
    Zpping咬合操作。使用元组的原因之一就是把多个值绑定在一起,以便他们能够被处理
    下面代码:
  
val symbols = Array("<","-",">")
val counts = Array(,,)
val pairs = symbols.zip(counts) //输出对偶数组:Array(("<",2),("-",10),(">",2)),这些对偶可以被一起处理:
for((s,n)<pairs) Console.print(s*n)  //会打印

//数组


scala学习笔记(4)映射和元组的更多相关文章

  1. Scala学习笔记(五)—— 元组和集合

    1. 映射 映射Java中的Map,即Key/Value的数据形式 映射的创建,有以下两种方法 scala> val map =Map("Lisa" -> 90 , & ...

  2. Scala学习笔记之:tuple、array、Map

    [TOC] 本文<快学Scala>的笔记 tuple学习笔记 tuple的定义 对偶是元组(tuple)的最简单形态--元组是不同类型的值的聚集. 元组的值是通过将单个值包含在圆括号中构成 ...

  3. 基于.net的分布式系统限流组件 C# DataGridView绑定List对象时,利用BindingList来实现增删查改 .net中ThreadPool与Task的认识总结 C# 排序技术研究与对比 基于.net的通用内存缓存模型组件 Scala学习笔记:重要语法特性

    基于.net的分布式系统限流组件   在互联网应用中,流量洪峰是常有的事情.在应对流量洪峰时,通用的处理模式一般有排队.限流,这样可以非常直接有效的保护系统,防止系统被打爆.另外,通过限流技术手段,可 ...

  4. Scala学习笔记及与Java不同之处总结-从Java开发者角度

    Scala与Java具有很多相似之处,但又有很多不同.这里主要从一个Java开发者的角度,总结在使用Scala的过程中所面临的一些思维转变. 这里仅仅是总结了部分两种语言在开发过程中的不同,以后会陆续 ...

  5. 机器学习(三)--- scala学习笔记

    Scala是一门多范式的编程语言,一种类似Java的编程语言,设计初衷是实现可伸缩的语言.并集成面向对象编程和函数式编程的各种特性. Spark是UC Berkeley AMP lab所开源的类Had ...

  6. Scala学习笔记(一)编程基础

    强烈推荐参考该课程:http://www.runoob.com/scala/scala-tutorial.html 1.   Scala概述 1.1.  什么是Scala Scala是一种多范式的编程 ...

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

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

  8. Scala学习之路 (四)Scala的数组、映射、元组、集合

    一.数组 1.定长数组和变长数组 import scala.collection.mutable.ArrayBuffer object TestScala { def main(args: Array ...

  9. scala 学习笔记(02) 元组Tuple、数组Array、Map、文件读写、网页抓取示例

    package yjmyzz import java.io.PrintWriter import java.util.Date import scala.io.Source object ScalaA ...

随机推荐

  1. Zookeeper简介及安装(一)

    1 Zookeeper入门1.1 概述Zookeeper是一个开源的分布式的,为分布式应用提供协调服务的Apache项目. 1.2 特点 1.3 数据结构 1.4 应用场景提供的服务包括:统一命名服务 ...

  2. JMS学习四(ActiveMQ消息过滤)

    一.消息的选择器 不管是在消息发送端设置消息过期时间还是在接收端设置等待时间,都是对不满足的消息有过滤的作用,那消息选择器就是为过滤消息而生的下面来看看消息选择器: ActiveMQ提供了一种机制,使 ...

  3. Spring Boot教程(八)创建含有多module的springboot工程

    创建根工程 创建一个maven 工程,其pom文件为: <?xml version="1.0" encoding="UTF-8"?> <pro ...

  4. Springboot入门:

    Springboot入门: 1.springboot是基于spring的全新框架,设计目的:简化spring应用配置和开发过程. 该框架遵循“约定大于配置”原则,采用特定的方式进行配置,从而事开发者无 ...

  5. 基于 Golang 完整获取百度地图POI数据的方案

    百度地图为web开发者提供了基于HTTP/HTTPS协议的丰富接口,其中包括地点检索服务,web开发者通过此接口可以检索区域内的POI数据.百度地图处于数据保护对接口做了限制,每次访问服务,最多只能检 ...

  6. nbu还原集群数据库异常问题

    集群数据库软件均已安装完毕,现在想从NBU上还原数据库,但在还原控制文件报错 [oracle@oracle-db1 ~]$ rman target / Recovery Manager: Releas ...

  7. 同一个tomcat部署多个项目11

    在开发项目中,有时候我们需要在同一个tomcat中部署多个项目,小编之前也是遇到了这样的情况,碰过不少的壁,故整理总结如下,以供大家参考.(以Linux为例,其他系统同样适用) 一.首先将需要部署的项 ...

  8. springboot上传文件大小限制的配置

    springboot配置文件: application.properties #配置文件传输 spring.servlet.multipart.enabled =true spring.servlet ...

  9. 初识java虚拟机——JVM

    1.Java程序运行过程 编写 编译 运行 过程如图所示: 2.JVM的认识 定义:JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚 ...

  10. 如果将get请求转换成post请求

    td><a href="emp/${emp.id}">Edit</a></td> <form action="" ...