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. 当在本地磁盘服务(Windows)中无法删除指定分区时的解决方案

    有时候,我们在使用Windows管理磁盘分区时,可能会出现部分分区无法删除的情况,也就是说右键快捷菜单中没有删除卷的操作项. 此时,我们可以按照如下的步骤进行操作即可完成: Step 1: 以管理员身 ...

  2. pyinstaller打包的exe太大?你需要嵌入式python玄学 惊喜篇

    上篇讲到 pyinstaller打包exe太大的问题 CodingDog:pyinstaller打包的exe太大?你需要嵌入式python玄学 前提篇​zhuanlan.zhihu.com 那既然py ...

  3. phpcms v9 更改首页

    phpcms v9的默认首页是(域名/index.php?m=content&c=index&a=init)那为什么你直接敲一个域名它就自己进 去了呢,其实在caches-->c ...

  4. [LeetCode]-009-Palindrome_Number

    Determine whether an integer is a palindrome. Do this without extra space. Some hints: Could negativ ...

  5. oracle 11g安装教程终结版

    1.解压文件 2.双击 “setup.exe” 3.高级安装.下一步 4.企业版  下一步 5.下一步 6.只要不报错,警告没事.(路径如果报错的话,没事,直接继续) 注意:如果有需要6.2版本的错误 ...

  6. 二、robotframework接口测试-常用关键字介绍

    1.常用关键字介绍: a. 打印:log                                                  用法:log   打印内容 ---------------- ...

  7. 【nginx】常用命令 启动|停止|重启|重新读取配置-centOS7

     查看服务的当前状态 (flaskApi) [root@67 goTest]# systemctl status nginx.service ● nginx.service - The nginx H ...

  8. hdu 4758 (AC自动机)

    除了走到哪里,还要加状态表示当前节点和已经匹配的串 #include<iostream> #include<cstdio> #include<string> #in ...

  9. Python Module_oslo.vmware_连接 vCenter

    目录 目录 前言 Install oslsvmware How to use the vSphere Web Service SDK 前言 oslo.vmware 是一个由 Python 实现的 vC ...

  10. Chrome 浏览器添加跨域支持

    开发前端本地项目时,涉及到与后端服务器的通信联调,在使用 ajax 时由于浏览器的安全策略不允许跨域.一种方式是本地搭建转发服务器,今天又 GET 到一种更直接的方式,在 Chrome 浏览器开启时添 ...