一、映射

1、Scala映射就是键值对的集合Map。默认情况下,Scala中使用不可变的映射。 如果想使用可变集合Map,必须导入scala.collection.mutable.Map    (导包时scala.collection.mutable._  为可变;scala.collection.immutable._ 为不可变)

val  map =Map("a"->10,"b"->11,"c"->12)    或者  val  map =Map(("a",10),("b",11),("c",12))

创建可变map    val map =scala.collection.mutable.Map("a"->10,"b"->11,"c"->12)

也可以创建hashmap      val map =new scala.collection.mutable.HashMap[String,Int]

映射这种数据结构是一种将键映 射到值的函数。   区别在于通常的函数计算值, 而映射只是做查询。
    2、获取映射中的值

val  map1=map("a")

val  map1=if(map.contain("a")) map("a") else 0        和下面的意义相同,相当于Java的三元运算符

val  map1=map.getOrElse("a",0)

如果映射并不包含请求中使用的键, 则会抛出异常。     要检查映射中是否有某个指定的键, 可以用contains方法。   getOrElse方法, 若包含相应的键, 就返回这个键所对应的值, 否则返加0.
映射.get(键)这样的调用返回一个Option对象, 要么是Some(键对应的值), 要么是None。  如果map 中有的话 返回Some,没有返回None

3、修改map元素

更新可变map集合

更新map元素: map("a")=30

增加多个元素: map+=("d"->10,"e"->11)

移除元素:map-="d"

更新不可变map集合:

添加不可变Map的元素, 产生一个新的集合Map, 原Map不变          val ages2 = ages + ("Mike" -> 36, "Tom" -> 40)
               移除不可变Map的元素, 产生一个新的集合Map, 原Map不变           val ages3 = ages - "Tom"

4、修改map的值

score("Bob")=10    前提map score是可变的

5、遍历map操作

遍历map的entrySet      for ((key, value) <- ages) println(key + " " + value)
         遍历map的key              for (key <- ages.keySet) println(key)

遍历map的value             for (value <- ages.values) println(value)
         生成新map, 反转key和value            for ((key, value) <- ages) yield (value, key)
         map的值是不能重复的,如果反转后,key值相同的,后面的覆盖前面的

6、SortedMap和LinkedHashMap (上边的map不记插入的顺序,而且也不按key排序)

SortedMap可以自动对Map的key的排序    val ages = scala.collection.immutable.SortedMap("leo" -> 30, "alice" -> 15, "jen" -> 25)
        LinkedHashMap可以记住插入entry的顺序

val ages = new scala.collection.mutable.LinkedHashMap[String, Int]

ages("leo") = 30

ages("alice") = 15

7、Java Map与Scala Map的隐式转换

Java Map 转换Scala Map

import scala.collection.JavaConversions.mapAsScalaMap;
class javaMapToScalaMap { def main(args: Array[String]): Unit = {
//创建Java的Map
val javaMap=new java.util.HashMap[String,Int]()
javaMap.put("a", 1)
javaMap.put("b", 2)
javaMap.put("c", 3) //将JAVA 的map转换成Scala的Map
val scalaMap: scala.collection.mutable.Map[String, Int] = javaMap
for((k,v)<-scalaMap) println(k+" "+v)
}
}

二、元组(tuple)

1、元组是不同类型的值的聚集    对偶是元组的最简单形态      元组的索引从1开始,而不是0,切记!
       val  tuple =(1,2.3,"li",true)
       val a=tuple._2      结果为double类型的2.3

Tuple拉链操作 :Tuple拉链操作指的就是zip操作    zip操作, 是Array类的方法, 用于将两个Array, 合并为一个Array
         比如Array(v1)和Array(v2), 使用zip操作合并后的格式为Array((v1,v2))      合并后的Array的元素类型为Tuple 
         例:

val students = Array("Leo", "Jack", "Jen")
                val scores = Array(80, 100, 90)
                 val studentScores = students.zip(scores)

如果取 值 例如    studentScores(1)._1           结果为"Jack"

如果长度不等,直接删除多余的元素

如果Array的元素类型是个Tuple, 调用Array的toMap方法, 可以将Array转换为Map   studentScores.toMap

三、实例

移除第一个负数之后的所有负数

构建数组

val array = ArrayBuffer[Int]()

array += (1, 2, 3, 4, 5, -1, -3, -5, -9)

var foundFirstNegative = false
val keepIndexes = for (i <- 0 until a.length if !foundFirstNegative || array(i) >= 0)
yield {
if (array(i) < 0) foundFirstNegative = true
i
}
for (i <- 0 until keepIndexes.length) { array(i) = array(keepIndexes(i)) }
array.trimEnd(a.length - keepIndexes.length)

四、补充

1、Scala中的集合有三大类:序列(Seq)、集(Set)、映射(Map)

2、对数组进行排序还有一种方法      scala.util.Sorting.quickSort(array)

3、高阶数组

scala(二)的更多相关文章

  1. scala(二) Future执行逻辑解读

    在scala中是没有原生线程的,其底层使用的是java的Thread机制.但是在scala中对java Thread进行了封装,实现了更便于操作线程的Future. 官方文档: Futures pro ...

  2. Scala(二)【基本使用】

    一.变量和数据类型 1.变量 语法:val / var 变量名:变量类型 = 值 val name:String = "zhangsan" 注意 1.val定义的变量想到于java ...

  3. Scala(二):元组、数组、映射

    元组:Tuple,不同类型值的聚集.将固定数量的项目组合在一起,以便它们可以作为一个整体传递. 与数组或列表不同,元组可以容纳不同类型的对象,但它们也是不可变的.元祖的实际类型取决于它的分量的类型,比 ...

  4. Scala(二) —— 函数

    try 表达式 var result = try{ Integer.parseInt("dog") }catch{ case _ => 0 }finally{ println ...

  5. Scala快速概览

    IDEA工具安装及scala基本操作 目录 一. 1. 2. 3. 4. 二. 1. 2. 3. 三. 1. 2. 3. 4. 5. 6. 7. 四. 1. (1) (2) (3) (4) (5) ( ...

  6. Programming In Scala笔记-第八章、函数与闭包

    当程序的代码量增大时,就需要对各功能模块进行分割,这些分割的小模块就是本文中接下来会进行分析的函数.接下来的部分会讲解包括函数嵌套,函数字面量,以及函数值等概念. 一.方法 一会函数一会方法的,是不是 ...

  7. Spark记录-Scala类和对象

    本章将介绍如何在Scala编程中使用类和对象.类是对象的蓝图(或叫模板).定义一个类后,可以使用关键字new来创建一个类的对象. 通过对象可以使用定义的类的所有功能. 下面的图通过一个包含成员变量(n ...

  8. Spark学习笔记--安装SCALA和IDEA开发环境

    一:安装Scala

  9. 快学Scala 第四课 (多维数组,与Java集合的互操作)

    Scala二维数组的定义: val arr2 = Array.ofDim[String](2, 2) arr2(0)(0) = "aa" arr2(1)(0) = "bb ...

随机推荐

  1. info信息的获取

    一.绝对路径(_SERVER[“SCRIPT_FILENAME”])这个是最常用,也是最有效的一个办法,找到phpinfo()页面可以直接找到网站的绝对路径,对于写shell和信息搜集是必不可少的.二 ...

  2. 【UGUI】 (一)------- 放大镜

    在许多游戏或应用中,我们常常看到放大镜的身影,而在Unity里面,制作一个简易的放大镜是非常简单的.    一. 创建一个3DObject 创建一个Cube或者 Cylinder,这里为了更像放大镜一 ...

  3. Teaching Machines to Understand Us 让机器理解我们 之一 引言

    Teaching Machines to Understand Us   By Tom Simonite  MIT Technology Review Vol.118 No.5 2015 让机器理解我 ...

  4. 好用的MarkDown编辑器

    MarkDown是编写文档非常有用的一个好工具

  5. PCA(主成分析)

    PCA通过将高维空间向量映射到低维,对于数据进行处理

  6. linux下搭建python机器学习环境

    前言 在 linux 下搭建 python 机器学习环境还是比较容易的,考虑到包依赖的问题,最好建立一个虚拟环境作为机器学习工作环境,在建立的虚拟环境中,再安装各种需要的包,主要有以下6个(这是看这个 ...

  7. charles 在mac下 抓取 https包

    1.  打开charles --> help --> SSL proxying --> install charles root certificate 2. 在弹出的添加证书窗口中 ...

  8. Thunder团队Final周贡献分分配结果

    小组名称:Thunder 项目名称:爱阅app 组长:王航 成员:李传康.翟宇豪.邹双黛.苗威.宋雨.胡佑蓉.杨梓瑞 分配规则 则1:基础分,拿出总分的20%(8分)进行均分,剩下的80%(32分)用 ...

  9. POJ 2376 (区间问题,贪心)

    题目链接:http://poj.org/problem?id=2376 题目大意:选择一些区间使得能够覆盖1-T中的每一个点,并且区间数最少 题目分析:这道题目很明显可以用贪心法来解决.但题目没有看起 ...

  10. MySQL 日志功能详解

    MySQL日志分类 1:查询日志 :query log     2:慢查询日志:slow_query_log 查询执行时长超过指定时长的查询操作所记录日志     3:错误日志:error log   ...