元组: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. 【Java】得到当前系统时间,精确到毫秒

    import java.text.SimpleDateFormat; import java.util.Date; import java.util.Calendar; public class Ma ...

  2. Docker 监控之 SaaS 解决方案

    过去的一年中,关于 Docker 的话题从未断过,而如今,从尝试 Docker 到最终决定使用 Docker 的转化率依然在逐步升高,关于 Docker 的讨论更是有增无减.另一方面,大家的注意力也渐 ...

  3. zabbix系列之八——安装后配置三Triggers

    1Triggers(触发器) 描述 详细 备注 术语描述 1)触发器是评估监控项采集的数据的逻辑表达式,代表了当前系统状态. 2)触发器可定义一个什么数据是可接受的阈值,因此,如果接收的数据超过了可接 ...

  4. Angular-学习。

     今天刚学了点关于Angular的知识,就迫不及待的想跟大家来分享. 1.angular.extend ( )方法可以把一个或多个对象中的方法和属性扩展到一个目的对象中. <script typ ...

  5. 【MySQL】无法启动mysql服务(位于本地计算机上)错误1067,进程意外中止

    好久没看MySQL了,今天启动起来找找感觉,尴尬了...发现服务启动不了.系统提示:无法启动mysql服务(位于本地计算机上)错误1067,进程意外中止. 解决过程: 1.在网上百度好久,看到一条解决 ...

  6. Sql Server中的谓词和运算符

    谓词和运算符配合使用是我们得到理想数据的最佳途径. 一.浅谈谓词 谓词的概念:一个运算结果为True.False或Unknown的逻辑表达式.它的运用范围有:where子句.Having子句.Chec ...

  7. VisualSVN Server迁移的方法

    VisualSVN Server迁移涉及到两种情况: 第一种情况:VisualSVN Server没有更换电脑或者服务器,只是修改Server name. 第二种情况:当VisualSVN Serve ...

  8. ps命令之排序

    Linux中ps命令会自动选择一列进行排序,但有时这不是我们想要的. 方法一: ps+sort sort 选项与参数: -f  :忽略大小写的差异,例如 A 与 a 视为编码相同:-b  :忽略最前面 ...

  9. 封装CoreGraphics的API简化绘图操作

    封装CoreGraphics的API简化绘图操作 效果 说明 1. 将CoreGraphics的API接口抽象为对象,让绘图变得简单易懂 2. 简化常用的绘制操作 3. 源码长期更新 源码 https ...

  10. Oracle数据库运维:要对监听日志文件(listener.log)进行定期清理,如果不定期清理,会遇到下面一些麻烦

    原文链接: http://www.lookdaima.com/WebForms/WebPages/Blanks/Pm/Docs/DocItemDetail.aspx?EmPreviewTypeV=2& ...