一、映射

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. Android 测试 之adb shell

    一.发送键盘事件: 命令格式1:adb shell input keyevent "value" 其中value以及对应的key code如下表所列: KeyEvent Value ...

  2. SteamVR Unity Plugin - v2.0.1中的InteractionSystem

    最近写VR项目的时候用到了SteamVR Unity Plugin - v2.0.1插件,感觉比之前用到的SteamVR plugin for Unity - v1.2.2版本改进了很多,就算不用VR ...

  3. Python字符串/元祖/列表/字典互转

    #-*- coding:UTF-8 -*- #author:RXS002 #1.字典 dict = {'name':'Zara','age':7,'class':'First'} #字典转换为字符串, ...

  4. java-HttpGetPost-图片字节流上传

    在java程序开发中经常用到与服务端的交互工作,主要的就是传递相应的参数请求从而获取到对应的结果加以处理 可以使用Get请求与Post请求,注意!这里的Get请求不是通过浏览器界面而是在程序代码中设置 ...

  5. ES6的新特性(22)——Reflect

    Reflect 概述 Reflect对象与Proxy对象一样,也是 ES6 为了操作对象而提供的新 API.Reflect对象的设计目的有这样几个. (1) 将Object对象的一些明显属于语言内部的 ...

  6. 冲刺ing-3

    第三次Scrum冲刺 队员完成的任务 队员 完成任务 吴伟华 分配任务,燃尽图 蔺皓雯 编写博客,美化主界面 蔡晨旸 美化主界面 曾茜 主页面设计 鲁婧楠 服务器建构 杨池宇 服务器建构 成员遇到的问 ...

  7. RabbitMQ 安装,配置

    1:安装 yum install -y rabbitmq-server   2:主要程序介绍 # 管理插件的程序 /usr/sbin/rabbitmq-plugins # 服务程序 /usr/sbin ...

  8. 201621123037 《Java程序设计》第9周学习总结

    作业09-集合与泛型z 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 这次改一个方式,就不用思维导图了,用图文结合方式来总结 1. Map三视图 键值: S ...

  9. 【week9】psp

    本周psp 项目 内容 开始时间 结束时间 中断时间 净时间 2016/11/14 看论文 蛋白质甲基化位点预测 9:30 13:00 15 195 讨论班 组内讨论班 13:30 17:00 0 2 ...

  10. tomcat下部署了多个项目启动报错java web error:Choose unique values for the 'webAppRootKey' context-param in your web.xml files

    应该是tomcat下部署了多个项目且都使用log4j. <!--如果不定义webAppRootKey参数,那么webAppRootKey就是缺省的"webapp.root". ...