数组用来存储相同类型的元素的固定大小的连续集合。数组属于容器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)
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。