Scala提供了一种数据结构叫作数组,数组是一种存储了相同类型元素的固定大小顺序集合。数组用于存储数据集合,但将数组视为相同类型变量的集合通常更为有用。

可以声明一个数组变量,例如:numbers,使用numbers[0]numbers[1]...numbers[99]来表示单个变量,而不是分别地声明每个变量,例如number0number1...等变量。 本教程介绍如何使用索引变量声明数组变量,创建数组和使用数组。数组的第一个元素的索引是数字0,最后一个元素的索引是元素的总数减去1

声明数组变量

要在程序中使用数组,必须先声明一个变量来引用数组,并且必须指定变量可引用的数组类型。

以下是声明数组变量的语法。

语法

var z:Array[String] = new Array[String](3)

// 或者

var z = new Array[String](3)
Scala

这里,变量z被声明为可以容纳三个元素的字符串数组。可以将值分配给单个元素或访问每个元素,访问元素通过使用如下命令来完成:

z(0) = "Zara"; z(1) = "Nuha"; z(4/2) = "Ayan"
Scala

一般来说,索引可以是产生整数的任何表达式。还有一种定义数组的方法 -

var z = Array("Maxsu", "Nancy", "Alen")
Scala

以下图片表示一个名称为:myList的数组。 这里,myList保存十个双精度(double)值,索引为09

处理处理

当处理数组元素时,我们经常使用循环控制结构,因为数组中的所有元素都是相同的类型,数组的大小是已知的。

下面是一个示例程序,演示如何创建,初始化和处理数组 -

示例

object Demo {
def main(args: Array[String]) {
var myList = Array(1.9, 2.9, 3.4, 3.5) // Print all the array elements
for ( x <- myList ) {
println( x )
} // Summing all elements
var total = 0.0; for ( i <- 0 to (myList.length - 1)) {
total += myList(i);
}
println("Total is " + total); // Finding the largest element
var max = myList(0); for ( i <- 1 to (myList.length - 1) ) {
if (myList(i) > max) max = myList(i);
} println("Max is " + max);
}
}
Scala

将上述程序保存在源文件:Demo.scala中,使用以下命令编译和执行此程序。

D:\>scalac Demo.scala
D:\>scala Demo 1.9
2.9
3.4
3.5
Total is 11.7
Max is 3.5
Shell

Scala不直接支持各种数组操作,它提供各种方法来处理任何维度的数组。 如果要使用不同的方法,则需要导入Array._包。

多维数组

在许多情况下,需要定义和使用多维数组(即数组的数组)。 例如,矩阵和表是可以被实现为二维数组结构的例子。

以下是定义二维数组的示例 -

var myMatrix = ofDim[Int](3,3)
Scala

这是一个具有三个元素的数组,每个元素都是一个具有三个元素的整数数组。

尝试以下示例程序来处理多维数组 -

import Array._

object Demo {
def main(args: Array[String]) {
var myMatrix = ofDim[Int](3,3) // build a matrix
for (i <- 0 to 2) {
for ( j <- 0 to 2) {
myMatrix(i)(j) = j;
}
} // Print two dimensional array
for (i <- 0 to 2) {
for ( j <- 0 to 2) {
print(" " + myMatrix(i)(j));
}
println();
}
}
}
Scala

将上述程序保存在源文件:Demo.scala中,使用以下命令编译和执行此程序。

D:\>scalac Demo.scala
D:\>scala Demo 0 1 2
0 1 2
0 1 2
Shell

连接阵列

尝试使用concat()方法连接两个数组的以下示例。可以将多个数组作为参数传递给concat()方法。

import Array._

object Demo {
def main(args: Array[String]) {
var myList1 = Array(1.9, 2.9, 3.4, 3.5)
var myList2 = Array(8.9, 7.9, 0.4, 1.5) var myList3 = concat( myList1, myList2) // Print all the array elements
for ( x <- myList3 ) {
println( x )
}
}
}
Scala

将上述程序保存在源文件:Demo.scala中,使用以下命令编译和执行此程序。

D:\>scalac Demo.scala
D:\>scala Demo 1.9
2.9
3.4
3.5
8.9
7.9
0.4
1.5
Shell

使用范围创建数组

使用range()方法来生成包含给定范围内增加整数序列的数组。 您可以使用final参数作为步差来创建序列; 如果不使用final参数,则步差将被假定为1

让我们举个例子来创建一个范围(10,20,2)的数组:创建一个数组,其元素介于1020之间,范围步差为2,数组中的元素是:10,12,14,1618

另一个例子:range(10,20)。 这里的范围不同,默认情况下它假定为1个元素。 它创建一个数组,其元素介于1020之间,范围步差为1。数组中的元素为:10,11,12,13...19

以下示例程序显示如何使用范围创建数组。

示例

import Array._

object Demo {
def main(args: Array[String]) {
var myList1 = range(10, 20, 2)
var myList2 = range(10,20) // Print all the array elements
for ( x <- myList1 ) {
print( " " + x )
} println()
for ( x <- myList2 ) {
print( " " + x )
}
}
}
Scala

将上述程序保存在源文件:Demo.scala中,使用以下命令编译和执行此程序。

D:\>scalac Demo.scala
D:\>scala Demo 10 12 14 16 18
10 11 12 13 14 15 16 17 18 19
Shell

Scala数组方法

以下是使用数组时可以使用的重要方法。 如上所示,必须在使用任何上述方法之前导入Array._包。 有关可用方法的完整列表,请查看Scala的官方文档。

序号 方法 说明
1 def apply( x: T, xs: T* ): Array[T] 创建一个T对象数组,其中T可以是:UnitDoubleFloatLongIntCharShortByteBoolean
2 def concat[T]( xss: Array[T]* ): Array[T] 将所有数组连接成一个数组。
3 def copy( src: AnyRef, srcPos: Int, dest: AnyRef, destPos: Int, length: Int ): Unit 将一个数组复制到另一个。 相当于Java的System.arraycopy(src,srcPos,dest,destPos,length)
4 def empty[T]: Array[T] 返回长度为0的数组
5 def iterate[T]( start: T, len: Int )( f: (T) => T ): Array[T] 返回一个包含函数的重复应用程序到一个起始值的数组。
6 def fill[T]( n: Int )(elem: => T): Array[T] 返回一个包含某些元素计算结果的数组。
7 def fill[T]( n1: Int, n2: Int )( elem: => T ): Array[Array[T]] 返回一个包含一些元素计算结果的二维数组。
8 def iterate[T]( start: T, len: Int)( f: (T) => T ): Array[T] 返回一个包含一个函数的重复应用程序到一个起始值的数组。
9 def ofDim[T]( n1: Int ): Array[T] 创建具有给定维度的数组。
10 def ofDim[T]( n1: Int, n2: Int ): Array[Array[T]] 创建一个二维数组
11 def ofDim[T]( n1: Int, n2: Int, n3: Int ): Array[Array[Array[T]]] 创建一个3维数组
12 def range( start: Int, end: Int, step: Int ): Array[Int] 返回一个整数间隔中包含相等间隔值的数组。
13 def range( start: Int, end: Int ): Array[Int] 返回一个包含一个范围内增加整数序列的数组。
14 def tabulate[T]( n: Int )(f: (Int)=> T): Array[T] 0开始的整数值范围内,返回一个包含给定函数值的数组。
15 def tabulate[T]( n1: Int, n2: Int )( f: (Int, Int ) => T): Array[Array[T]]

Spark记录-Scala数组的更多相关文章

  1. Spark记录-Scala数组/List/Map/Set

    import Array._ import scala.collection.mutable.Set object DataStructure { def main(args:Array[String ...

  2. Spark记录-Scala程序例子(函数/List/match/option/泛型/隐式转换)

    object func { def main(args:Array[String]):Unit={ //函数赋值给变量时, 必须在函数后面加上空格和下划线. def sayHello(name: St ...

  3. Spark记录-scala快速入门

    1.hello world程序 object HelloWorld { def main(args: Array[String]) { println("Hello,World!" ...

  4. Spark记录-Scala集合

    Scala列表 Scala列表与数组非常相似,列表的所有元素都具有相同的类型,但有两个重要的区别. 首先,列表是不可变的,列表的元素不能通过赋值来更改. 其次,列表表示一个链表,而数组是平的. 具有类 ...

  5. Spark记录-Scala记录(基础程序例子)

    import scala.util.control._ object learnning { def main(args:Array[String]):Unit={ val n:Int=10 prin ...

  6. Spark记录-Scala字符串

    Scala字符串 在Scala中的字符串和Java中的一样,字符串是一个不可变的对象,也就是一个不能修改的对象.可以修改的对象,如数组,称为可变对象.字符串是非常有用的对象,在本节的最后部分,我们将介 ...

  7. Spark记录-Scala shell命令

    1.scala shell命令 scala> :help All commands can be abbreviated, e.g., :he instead of :help. :edit & ...

  8. Spark记录-Scala语法基础

    参考:http://docs.scala-lang.org/cheatsheets/index.html.http://docs.scala-lang.org/.http://www.scala-la ...

  9. Spark记录-Scala函数

    Scala函数 Scala有函数和方法. Scala方法是一个具有名称和签名的类的一部分. Scala中的函数是一个可以分配给变量的完整对象. 函数定义可以出现在源文件中的任何位置. 不带参数的函数 ...

随机推荐

  1. servelt filter listener 的生命周期

    1. servlet    当第一次请求一个servlet资源时,servlet容器创建这个servlet实例,并调用他的 init(ServletConfig config)做一些初始化的工作,然后 ...

  2. 最简单的XML用法

    在传递数据时,XML和JSON是最常用的数据格式,SQL Server从很早的版本就开始支持XML格式,而对于JSON格式,SQL Server从2016版本开始支持.大多数数据库系统并没有升级到SQ ...

  3. 金蝶K3 11.0 WISE版本盘点机PDA条码数据采集器仓库条码管理

  4. 详细聊聊k8s deployment的滚动更新(二)

    一.知识准备 ● 本文详细探索deployment在滚动更新时候的行为 ● 相关的参数介绍:   livenessProbe:存活性探测.判断pod是否已经停止   readinessProbe:就绪 ...

  5. kubeadm安装kubernetes 1.13.1集群完整部署记录

    k8s是什么 Kubernetes简称为k8s,它是 Google 开源的容器集群管理系统.在 Docker 技术的基础上,为容器化的应用提供部署运行.资源调度.服务发现和动态伸缩等一系列完整功能,提 ...

  6. 11.7 Daily Scrum(周末暂停两天Daily Scrum)

    由于APEC放假,有些成员离校了,他们那部分的任务会暂时拖后一些,之后会加班加点赶工. 另外,每个人的任务还是相对独立,离校成员的任务进度不会对其他成员的进度造成很大影响.   Today's tas ...

  7. 11.19daily_scrum

    本阶段的工作内容为测试并且撰写笔记本APP应用的测试报告,目的在于总结测试阶段的测试以及分析测试结果,描述系统是否符合需求,测试软件功能的完善性.除了音频界面还未完成,其他部分均已开始实现测试功能,具 ...

  8. 四则运算APP最后阶段

    四则运算APP最后阶段 [开发环境]:eclipse [开发项目]:小学生四则运算APP [开发人员]:郑胜斌 http://www.cnblogs.com/zsb1/ 孔德颖 http://www. ...

  9. Python之路3【知识点】白话Python编码和文件操作(截载)

    无意发现这篇文章讲的比较好,存下来供参考: http://www.cnblogs.com/luotianshuai/p/5735051.html

  10. 动态规划刷题集python代码

    1 爬楼梯(Fibonacci) #有一楼梯共M级,若每次只能跨上一级或二级,要走上第M级,共有多少种走法? def fun(m): c = [0]*m c[0] = 1 c[1] = 2 for i ...