理论教育 数组(Array)及其应用

数组(Array)及其应用

时间:2023-06-14 理论教育 版权反馈
【摘要】:例3. 静态声明长度为3 的字符串数组,同时赋值scala> val strArray2 = ArraystrArray2: Array[String] = Array例4. 使用Range 方法创建有范围的数组scala> var myArray = RangemyArray: scala.collection.immutable.Range = Range例5. 声明自动推导数据类型的数组scala> val myInt = ArraymyInt: Array[Int] = Array二、数组元素的访问数组的第一个元素的索引是数字0,数组元素的访问时通过“数组名(下标)”的方式访问,这和Java 的访问方式不一样。

数组(Array)及其应用

数组用来存储相同类型的元素的固定大小的连续集合。数组属于容器IndexSeq的子类,IndexSeq 类似于Java 中的ArrayList,能够通过索引来随机访问。

一、数组变量的声明

数组声明的语法格式为:new Array[数据类型](数组长)。关键字new 可以省去,Scala 会自动根据数据类型推导出数据的类型,如果在声明数组同时赋值,也可以将数据类型省略。

例1. 声明长度为10 的整型数组

scala> val intArray = new Array[Int](10)

intArray: Array[Int] = Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0)

例2. 声明长度为10 的字符串数组

scala> val strArray = new Array[String](10)

strArray: Array[String] = Array(null, null, null, null, null, null, null, null,

null, null)

strArray 的值不能改变,但是数组元素的值可以改变,这有点像C 语言中的指针常量。

通过上述例子看到,数组声明的同时都会给其赋以默认值,复杂对象类型在数组定义时被初始化为null,数值型被初始化为0。

例3. 静态声明长度为3 的字符串数组,同时赋值

scala> val strArray2 = Array("Hello", "Scala", "Spark")

strArray2: Array[String] = Array(Hello, Scala, Spark)

例4. 使用Range 方法创建有范围的数组

scala> var myArray = Range(10, 20, 2)

myArray: scala.collection.immutable.Range = Range(10, 12, 14, 16, 18)

例5. 声明自动推导数据类型的数组

scala> val myInt = Array(1,2,3)

myInt: Array[Int] = Array(1, 2, 3)

二、数组元素的访问

数组的第一个元素的索引是数字0,数组元素的访问时通过“数组名(下标)”的方式访问,这和Java 的访问方式不一样。

如访问strArray2 中第二个元素的值:

scala> strArray2(2)

res73: String = Spark

三、定义不定长数组

不定长数组采用ArrayBuffer 类,同时需要引入scala.collection.mutable 包。

例1. 定义不定长整型数组

scala> val mutableArr = new scala.collection.mutable.ArrayBuffer[Int]();

mutableArr: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer()

例2. 动态添加

scala> mutableArr += 2

res74: mutableArr.type = ArrayBuffer(2)

scala> mutableArr += 6

res75: mutableArr.type = ArrayBuffer(2, 6)

例3. 追加数组

scala> mutableArr ++= Array(7, 8, 9)

res76: mutableArr.type = ArrayBuffer(2, 6, 7, 8, 9)

++=用于向数组中追加内容,++=右侧可以是任何集合

例4. 删除指定位置元素

//删除第1 个元素

scala> mutableArr.remove(0)

res77: Int = 2

//删除第2,3 个元素

scala> mutableArr.remove(1,2)(www.daowen.com)

scala> mutableArr

res79: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(6, 9)

例5. 指定位置插入元素

scala> mutableArr.insert(0,2)

scala> mutableArr

res82: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(2, 6, 9)

例6. 变为不可变数组

scala> val array3 = mutableArr.toArray

array3: Array[Int] = Array(2, 6, 9)

四、多维数组的定义

很多情况下,需要定义和使用多维数组(即数组的元素数组)。例如,矩阵和表格结构的实例可以实现为二维数组。Scala 提供了ofDim 方法来定义多维数组。

例1. 定义长2*3 的二维数组

scala> var myMatrix = Array.ofDim[Int](2,3)

myMatrix: Array[Array[Int]] = Array(Array(0, 0, 0), Array(0, 0, 0))

五、数组的遍历

数组是一个集合,采用for 循环可以快速的遍历整个数组。

scala> val array3 = Array(6,5,4,3,1,2,7,8,9)

scala> for(i <- array3) print(i + " ")

6 5 4 3 1 2 7 8 9

例1. 指定输出下标为偶数的元素

scala> for(i <- 0 until (array3.length,2)) print(array3(i) + " ")

6 4 1 7 9

例2. 将数组逆序输出

scala> for(i <- (0 until array3.length).reverse) print(array3(i) + " ")

9 8 7 2 1 3 4 5 6

六、数组常用函数

1.数组排序(sorted)

scala> val array4 = Array(6,7,1,2,9)

array4: Array[Int] = Array(6, 7, 1, 2, 9)

scala> val result = array4.sorted

result: Array[Int] = Array(1, 2, 6, 7, 9)

2.求数组所有元素之和(sum)

scala> val sum = array4.sum

sum: Int = 25

3.求数组元素最大值(max),最小值(min)

scala> val max = array4.max

max: Int = 9

scala> val min = array4.min

min: Int = 1

4.两个数组连接(concat)

scala> val array5 = Array(3,4,0,8)

array5: Array[Int] = Array(3, 4, 0, 8)

scala> val newArray = Array.concat(array4, array4)

newArray: Array[Int] = Array(6, 7, 1, 2, 9, 6, 7, 1, 2, 9)

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈