元组: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. Python这个缩进让我焦头烂额!最奇葩的缩进...

        例如如下程序.     运行上面代码,如果输入年龄小于20,将会看到如下运行结果.     从上面代码可以看出,如果输入的年龄大于20,则程序会执行整体缩进的代码块. 再次重复:Python不 ...

  2. leveldb开篇

    因为工作的需求,最近看了一些项目的源码,包括nginx.tair.leveldb,一直看了下来都没有写东西的习惯,虽然作了不少记录,但都是只有自己才能看懂的笔记. 好多次都说开始写blog,锻炼一下自 ...

  3. Python-Image 基本的图像处理操作

    Python-Image 基本的图像处理操作,有需要的朋友可以参考下. Python 里面最常用的图像操作库是 Image library(PIL),功能上,虽然还不能跟Matlab比较,但是还是比较 ...

  4. 4 个用于构建优秀的命令行用户界面的 Python 库

    作者: Amjith Ramanujam 译者: LCTT Lv Feng 在这个分为两篇的关于具有绝佳命令行界面的终端程序的系列文章的第二篇教程中,我们将讨论 Prompt.Toolkit.Clic ...

  5. 【ORACLE】 安装需要注意的问题(一)

    安装ORACLE虽然不是很难,但是有时候很容易因为一些小细节导致安装失败,浪费大量的时间. 这里总结一下安装ORACLE的时候需要注意的问题,以及解决的办法 问题1:系统先决条件检查 正在检查操作系统 ...

  6. c++作业之圆面积

    代码传送门

  7. U-Mail如何实现邮件营销自动化?

    对于很多企业来说,人力成本可能就是最大的成本支出了,如果能节省这方面成本支出,也就意味着公司增收了,因此很多公司在做营销工作时,都希望营销能够高效率.有系统.有规划.循序渐进的开展,同时还要减轻营销人 ...

  8. 【原创】uwsgi中多进程+多线程原因以及串行化accept() - thunder_lock说明

    如有不对,请详细指正. 最近再研究uwsgi如何部署python app,看uwsgi的文档,里面有太多的参数,但每个参数的解释太苍白,作为菜鸟的我实在是不懂.想搞清楚uwsgi的工作原因以及里面的一 ...

  9. jquery根据字符切割字符串

    var str=new String(); var arr=new Array(); str="ddd,dsd,3,dd,g,k"; //可以用字符或字符串分割 arr=str.s ...

  10. markdownpad 2 pro版本 注册码

    注册email:  www.zixue.it 注册码: 4vuvQFtGkF0oH7by922v75FtaUGq7niFveCKDxqC2KSqYTfaSGzxzxKQXNhc2BG51N9URrF7 ...