元组: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. Django基本设置

    Dango设置流程图片示例: 设置路由时需要注意的一个点是:Django中定义路由时,通常习惯以斜线 / 结尾 其他常用命令: python manage.py runserver 0.0.0.0:8 ...

  2. linux 局域网探测工具nmap

    NMap,也就是Network Mapper,是Linux下的网络扫描和嗅探工 具包,其基本功能有三个, 一是探测一组主机是否在线: 其次是扫描主机端口,嗅探所提供的网络服务: 还可以推断主机所用的操 ...

  3. 数据契约(DataContract)里的DataMember特性

      数据契约(DataContract) 服务契约定义了远程访问对象和可供调用的方法,数据契约则是服务端和客户端之间要传送的自定义数据类型. 一旦声明一个类型为DataContract,那么该类型就可 ...

  4. EBS请求定义成菜单

    1. 将请求定义为“功能”路径:系统管理员 –应用产品-函数输入自定义的功能名称,用户功能名以及说明   “特性”TAB页: 类型选择“表单”,其余两个字段默认:在表单TAB页: 表单字段:选择“运行 ...

  5. 连接AWS Ubuntu服务器

    1.在AWS上创建了Ubuntu实例后,在实例里点连接.点使用PuTTY连接,下载PuTTY软件. 2.在所有程序里找到PuTTYgen并打开,点Load选择创建实例时的pem文件,点save pri ...

  6. sql建JOB语句

    declare job_id pls_integer; begin sys.dbms_job.submit(job => job_id, what => 'proc_AGTAWBSTATI ...

  7. 有序字典(OrderedDict)、默认字典(defaultdict)内置函数

    http://www.cnblogs.com/wupeiqi/articles/5115190.html import collections do = collections.OrderedDict ...

  8. 北美PM活着的攻略

    http://www.followmedoit.com/bbs/forum.php?mod=viewthread&tid=47&extra=page%3D1 在北美,做PM不易,需要交 ...

  9. java.lang.verifyerror:bad type on orerand stack

    问题: junit测试的时候报这个错:java.lang.verifyerror:bad type on orerand stack 原因:(多种,自行逐个排查) 1.class not find 引 ...

  10. 第 6 章 C控制语句:循环

    6.16.3 使用嵌套循环,按下面格式打印字母: F FE FED FEDC FEDCB FEDCBA #include <stdio.h> int main() { ; ); row ! ...