元组:Tuple,不同类型值的聚集。
将固定数量的项目组合在一起,以便它们可以作为一个整体传递。 与数组或列表不同,元组可以容纳不同类型的对象,但它们也是不可变的。
元祖的实际类型取决于它的分量的类型,比如下面的类型实际为 Tuple3[Int,String,String]
索引是从1开始的
object Tuple {
def main(args: Array[String]): Unit = {
val triple1 = (100, "Scala", "Spark")
println(triple1._1)
println(triple1._2)
println(triple1._3)
//它们也可用于将数据值列表作为并发编程中的参与者之间的消息传递。
val triple2 = (4, 3, 2, 1)
val sum = triple2._1 + triple2._2 + triple2._3 + triple2._4 println("Sum of elements: " + sum) //元组的迭代
val triple3 = (4, 3, 2, 1) triple3.productIterator.foreach { i => println("Value = " + i) } //元组转换为字符串:可以使用Tuple.toString()方法将元组的所有元素连接成字符串
val triple4 = new Tuple3(1, "hello", Console) //此处为显式的使用 println("Concatenated String: " + triple4.toString())
//交换元素:可以使用Tuple.swap方法交换Tuple2中的元素
val triple5 = new Tuple2("Scala", "hello") println("Swapped Tuple: " + triple5.swap) }
}
数组:Array
1.定长数组
val nums = new Array[Int](10) 长度为10 初始元素为0
2.变长数组
ArrayBuffer
3.常用算法
sum、max、sorted
4.多维数组
多维数组是通过数组的数组来实现的
5.数组转换
Scala中数组转换不会改变原来的数组,只会产生一个新的数组
object ArrayOps {
def main(args: Array[String]): Unit = { //ArrayBuffer
val arraybuffer = ArrayBuffer[Int]()
//添加元素
arraybuffer += 1
//用+=在尾部添加元素
arraybuffer += (2,3,4,5)
//添加多个元素,可以用++=添加任意集合
arraybuffer ++= Array(6,7,8)
//移除元素,可以从头部或者尾部
arraybuffer.trimStart(1)
arraybuffer.trimEnd(3)
//你也可以用从任意位置插入或者溢出元素,这种操作不高效
arraybuffer.insert(2,11)//第一个参数为索引,第二个参数为插入值
arraybuffer.remove(3,2)//第一个参数为索引,第二个参数为移除的个数
//有时你需要构建一个Array,但是不知道需要装多少元素,可以构建一个数组缓冲
arraybuffer.toArray //数组的遍历
val array = Array(1, 2, 3, 4, 5)
//until是RichInt类的方法,返回所有小于上限的数据
for (i <- 0 until array.length) {
println(array(i))
}
//如果在循环体中不需要使用下标,我们可以直接访问数组元素
for(elem <- array){
println(elem)
} arraybuffer.sum
arraybuffer.max
arraybuffer.sorted
//多维数组
//这个Double的多维数组类型为Array[Array[Double]],构造这个数组使用ofDim方法
val matrix1 = Array.ofDim[Double](3,4)//3行,4列
//访问元素
//matrix1(row)(column)
//不规则的数组,每一行长度不相同
val matrix2=new Array[Array[Int]](10)
for(i <- 0 until matrix2.length){
matrix2(i) = new Array[Int](i+1)
} //数组的转换
//yield
val a = Array(2,3,5,6)
val result = for(elem <- a) yield 2 * elem
//如果不满足,可以通过守卫
val result1 = for(elem <- a if elem % 2==0) yield 2 * elem
}
}
程序员名言:“如果只能有一种数据结构,那就用哈希表吧”
映射:Map(k,v)
1.构造映射 mutable.Map[String ,Int];immutable.Map[String ,Int]
2.获取及更新映射值
3.迭代映射 for((k,v) -> 映射) 处理k,v
4.已排序映射
object MapOps {
def main(args: Array[String]): Unit = {
var scores1=Map("john" -> 10,"Alice" -> 20,"Bob" -> 30)
//上述代码构造了一个不可变映射Map[String,Int],其值不能被改变,因为Map默认调用的是immutable包下的,源码为:val Map = immutable.Map
//可变映射
val scores2=scala.collection.mutable.Map("john" -> 10,"Alice" -> 20,"Bob" -> 30)
//空映射,需要选定类型
val scores3=new scala.collection.mutable.HashMap[String ,Int] //获取映射中的值:可以根据键获取值
val johnScore=scores1("john")//类似Java中的scores.get("john")
//检查映射中是否包含某个值
val bobScore = if(scores1.contains("Bob")) scores1("Bob") else 0
//快捷写法
val aliceScore = scores1.getOrElse("Alice",0)
//更新映射中的值,需要在可变映射中
scores2("john")=80
scores2 += ("Boole" -> 50,"LiLei" -> 45)
//虽然不可变映射顾名思义不可变,但是你可以这样
val newScores=scores1 + ("HanMei" -> 99)
//同理,你需要从不可变映射中移除某个值可以使用-去掉该键的映射
scores1 = scores1 - "Alice" //迭代映射:你可以在Scala的for循环中使用模式匹配
//如果只需要访问键和值,你可以使用keySet和values,values方法返回的是一个Iterable,你可以在循环中使用这个Iterable
scores1.keySet //一个类似Set的("john","Alice","Bob" )这样的集
for(i <- scores1.values) println(i) //已排序映射:默认情况下,Scala给的是哈希表,需要顺序的访问所有的键,我们需要一个树形映射 val scores4 = scala.collection.immutable.SortedMap("john" -> 10,"Alice" -> 20,"Bob" -> 30) //如果要插入顺序访问所有键
val scores5 = scala.collection.mutable.LinkedHashMap("john" -> 10,"Alice" -> 20,"Bob" -> 30) }
}

Scala(二):元组、数组、映射的更多相关文章

  1. Scala学习——数组/映射/元组

    [<快学Scala>笔记] 数组 / 映射 / 元组 一.数组 1.定长数组 声明数组的两种形式: 声明指定长度的数组 val 数组名= new Array[类型](数组长度) 提供数组初 ...

  2. Scala详解---------数组、元组、映射

    一.数组 1.定长数组 声明数组的两种形式: 声明指定长度的数组 val 数组名= new Array[类型](数组长度) 提供数组初始值的数组,无需new关键字 Scala声明数组时,需要带有Arr ...

  3. Scala具体解释---------数组、元组、映射

    一.数组 1.定长数组 声明数组的两种形式: 声明指定长度的数组 val 数组名= new Array[类型](数组长度) 提供数组初始值的数组,无需newkeyword Scala声明数组时.须要带 ...

  4. 关于iOS 二维数组,对象映射的问题

    数据格式如下: 遇到的问题是二维数组的 对象无法 通过 yymodel 直接实力话 ~~~ -"scoring_probability_distribution": [ -[ -{ ...

  5. 【Scala篇】--Scala中集合数组,list,set,map,元祖

    一.前述 Scala在常用的集合的类别有数组,List,Set,Map,元祖. 二.具体实现 数组   1.创建数组 new Array[Int](10) 赋值:arr(0) = xxx Array[ ...

  6. VUE小练习(按钮颜色,数组映射)

    VUE小练习(按钮颜色,数组映射) ## 1.有红.黄.蓝三个按钮,以及一个200x200矩形框box, 点击不同的按钮,box的颜色会被切换成指定的颜色 ''' 解法一:我本来的思路,把三个按钮绑定 ...

  7. [原创]Scala学习:数组的基本操作,数组进阶操作,多维数组

    1.Scala中提供了一种数据结构-数组,其中存储相同类型的元素的固定大小的连续集合.数组用于存储数据的集合,但它往往是更加有用认为数组作为相同类型的变量的集合 2 声明数组变量: 要使用的程序的数组 ...

  8. php中向前台js中传送一个二维数组

    在php中向前台js中传送一个二维数组,并在前台js接收获取其中值的全过程方法: (1),方法说明:现在后台将数组发送到前台 echo json_encode($result); 然后再在js页面中的 ...

  9. java基础5 (一维)数组和二维数组

    本文知识点(目录): 一维数组(一维数组的概念.优点.格式.定义.初始化.遍历.常见异常.内存分析以及常见操作(找最大值.选择排序.冒泡排序等等))    二维数组(二维数组的遍历.排序.查找.定义. ...

  10. Scala学习(三)----数组相关操作

    数组相关操作 摘要: 本篇主要学习如何在Scala中操作数组.Java和C++程序员通常会选用数组或近似的结构(比如数组列表或向量)来收集一组元素.在Scala中,我们的选择更多,不过现在我们先假定不 ...

随机推荐

  1. 2cmd 窗口 javac 错误:编码GBK的不可映射字符

    错误截图: 解决办法:第一步 第二步:

  2. mybatis resultMap 映射配置

    现有数据库表: CREATE TABLE `dept_p` ( `DEPT_ID` ) NOT NULL, `DEPT_NAME` ) DEFAULT NULL, `PARENT_ID` ) DEFA ...

  3. USTCCourseCommunity 项目介绍

    我们的项目名为USTCCourseCommunity,科大课程社区,主要提供课表管理.课程资源管理.课程信息管理.智能排课.轻松评课等方面的服务,旨在为科大师生提供便捷. 科大现有课程服务形式存在的问 ...

  4. 指令-Directive

    restrict:'A'用作设定用那种方式使用指令. 可组合使用如restrict:'AE' E - 元素名称: <my-directive></my-directive> A ...

  5. [UI] Article intro effects

    Article intro effects http://freebiesbug.com/code-stuff/article-intro-effects/

  6. iOS8中的定位服务

    iOS8中的定位服务 My app that worked fine in iOS 7 doesn't work with the iOS 8 SDK. CLLocationManager doesn ...

  7. procexp

    https://www.cnblogs.com/iTBear/articles/2789151.html

  8. Altium制作DC002的PCB封装和3D模型

    Altium制作DC002的PCB封装和3D模型 常用的电源连接器(Dc Power Jack Connector)DC002.DC005等等型号的3D模型在网上很难找到合适的,我们可以选择CUI 公 ...

  9. #006 dependencies和devDependencies的区别

    dependencies 和 devDependencies 区别 在 npm 中的 package.json ,有两种插件的依赖包配置形式。 dependencies 和 devDependenci ...

  10. 到底该用img还是background-image?

    在前端页面的实现过程中,我们经常会遇到这个情况:有一个盒子,盒子里面需要放一张图片.这个时候,我们既可以通过添加image标签来实现,也可以通过设置背景图的形式实现,哪种更好呢? 一般情况下,可能就是 ...