元组: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 接口默认修饰符

    概论: java接口可以是public 的,也可以是friendly的,但一定是abstracted的. java接口里的方法只能是public的.abstract的. java接口里的成员变量只能是 ...

  2. Eigen 学习之块操作

    Eigen 为 Matrix .Array 和  Vector提供了块操作方法.块区域可以被用作 左值 和 右值.在Eigen中最常用的块操作函数是 .block() . block() 方法的定义如 ...

  3. 树莓派2 raspyberry Pi2 交叉编译app

    Pi 使用的是ARMV7架构的BCM2836, 下载交叉编译器 arm-linux-gnueabihf-gcc 即可. 本地环境: Ubuntu14 + x86_64 1. 下载编译器地址: 1). ...

  4. twemproxy源码分析

    twemproxy是twitter开源的redis/memcached 代理,数据分片提供取模,一致性哈希等手段,维护和后端server的长连接,自动踢除server,恢复server,提供专门的状态 ...

  5. 更新tableView的某个cell

    更新tableView的某个cell 异步加载完数据后更新某个cell,这应该是非常常见的使用方法了,我们经常会用reloadData. 效果: 源码: // // RootViewControlle ...

  6. 解析UIControl

    解析UIControl 从下图可以看出,UIControl继承自UIView,添加了响应事件功能. UIButton之所以能响应各种各样的事件是因为继承自UIControl 使用UIControl可以 ...

  7. UNIX高级环境编程(6)标准IO函数库 - 流的概念和操作

    标准IO函数库隐藏了buffer大小和分配的细节,使得我们可以不用关心预分配的内存大小是否正确的问题. 虽然这使得这个函数库很容易用,但是如果我们对函数的原理不熟悉的话,也容易遇到很多问题.   1 ...

  8. 心灵鸡汤[all]

    1. [iPhone 有哪些非常有必要下载的 App] 2. 相 信 自 己 3. 英语四级作文模板 4. 比尔盖茨的人生忠告 5. 李嘉诚 <Are you ready> 6. 李嘉诚语 ...

  9. javascript Spline代码

    代码是通过网上一个winform代码中提取修改而来的.后转为javascript 版本. /* points = new Array(); points.push({x:1,y:2}); */ fun ...

  10. 浅谈 JSONP

    说起跨域的解决方案,总是会说到 JSONP,但是很多时候都没有仔细去了解过 JSONP,可能是因为现在 JSONP 用的不是很多(多数时候都是配置响应头实现跨域),也可能是因为用 JSONP 的场景一 ...