【Scala集合】12、数组Array

在这里插入图片描述

一、数组Array

在 Scala 中,Array 是一种定长的、可变的数组数据结构。它是基本的数组类型,可以容纳相同类型的元素,并在内存中以连续的方式存储这些元素。

Array 在 Scala 中是一个对象,它继承自 scala.collection.mutable.ArraySeq 类。虽然 Array 是可变的(即长度不可变,但可以修改其中的元素),但在函数式编程中,推荐使用不可变的集合类型(如列表、向量等)。如果需要在 Scala 中使用不可变的数组,可以使用 Array 的不可变视图 ArrayOps,或者直接使用不可变的集合类型。

创建 Array 的语法如下:

val myArray: Array[Int] = Array(1, 2, 3, 4, 5)

在上述示例中,我们创建了一个包含整数元素的 Array,并将其赋值给名为 myArray 的变量。

由于 Array 是可变的,您可以通过索引访问和修改数组的元素。例如:

val myArray: Array[Int] = Array(1, 2, 3, 4, 5)

// 访问数组元素
println(myArray(0)) // 输出:1

// 修改数组元素
myArray(2) = 10

// 输出修改后的数组
println(myArray.mkString(", ")) // 输出:1, 2, 10, 4, 5

在上述示例中,我们访问数组的第一个元素(索引为 0),然后修改数组的第三个元素(索引为 2)为 10。

需要注意的是,由于 Array 是定长的,一旦创建,其长度不可更改。如果需要动态增减元素的集合,应使用不可变的集合类型,例如 ListVector

总结:Array 是 Scala 中的定长可变数组类型,可容纳相同类型的元素。您可以通过索引访问和修改数组的元素。然而,推荐在函数式编程中使用不可变的集合类型来代替可变数组,以提高代码的健壮性和可读性。

二、多维数组

在 Scala 中,您可以使用多维数组来表示具有多个维度的数组结构。Scala 中的多维数组实际上是数组的数组,也就是说,一个多维数组包含若干个一维数组,每个一维数组表示一个维度。

创建多维数组的方法是使用 Array.ofDim 方法,该方法接受一个或多个维度的大小作为参数,并返回一个多维数组。

下面是创建和访问二维数组的示例:

// 创建一个二维数组,表示3行4列的矩阵
val matrix: Array[Array[Int]] = Array.ofDim[Int](3, 4)

// 为二维数组赋值
matrix(0)(0) = 1
matrix(0)(1) = 2
matrix(0)(2) = 3
matrix(0)(3) = 4

matrix(1)(0) = 5
matrix(1)(1) = 6
matrix(1)(2) = 7
matrix(1)(3) = 8

matrix(2)(0) = 9
matrix(2)(1) = 10
matrix(2)(2) = 11
matrix(2)(3) = 12

// 访问二维数组的元素
println(matrix(1)(2)) // 输出:7

在上述示例中,我们使用 Array.ofDim[Int](3, 4) 创建了一个二维数组,表示一个3行4列的矩阵。然后,我们通过索引来访问和修改二维数组的元素。注意,索引从0开始,matrix(1)(2) 表示第二行第三列的元素,即7。

可以根据需要创建更高维度的多维数组,只需要在 Array.ofDim 方法中传递多个维度大小即可。

还可以在定义多维数组的同时直接初始化其值。可以通过在 Array.ofDim 方法中提供初始化的元素值来实现这一点。

下面是创建并初始化二维数组的示例:

// 创建一个二维数组,并初始化元素值
val matrix: Array[Array[Int]] = Array(
  Array(1, 2, 3, 4),
  Array(5, 6, 7, 8),
  Array(9, 10, 11, 12)
)

// 访问二维数组的元素
println(matrix(1)(2)) // 输出:7

在上述示例中,我们使用 Array 的嵌套形式来创建一个二维数组,并在定义的同时直接初始化了其中的元素值。

三、遍历数组

在 Scala 中,您可以使用多种方式来遍历数组,每种方式都有其特定的用途和适用场景。以下是遍历数组的几种常见方式:

1、使用 for 循环

val myArray: Array[Int] = Array(1, 2, 3, 4, 5)

// 使用 for 循环遍历数组
for (element <- myArray) {
    
    
  println(element)
}

2、使用 foreach 方法

val myArray: Array[Int] = Array(1, 2, 3, 4, 5)

// 使用 foreach 方法遍历数组
myArray.foreach {
    
     element =>
  println(element)
}

3、使用索引遍历

val myArray: Array[Int] = Array(1, 2, 3, 4, 5)

// 使用索引遍历数组
for (i <- 0 until myArray.length) {
    
    
  println(myArray(i))
}

4、使用 indices 方法遍历

val myArray: Array[Int] = Array(1, 2, 3, 4, 5)

// 使用 indices 方法遍历数组
for (i <- myArray.indices) {
    
    
  println(myArray(i))
}

5、使用 zipWithIndex 方法遍历

val myArray: Array[Int] = Array(1, 2, 3, 4, 5)

// 使用 zipWithIndex 方法遍历数组,并获取元素及其索引
for ((element, index) <- myArray.zipWithIndex) {
    
    
  println(s"Element at index $index: $element")
}

注意:

  • 第一种和第二种方式适用于遍历数组中的每个元素,而后三种方式允许您获取元素的索引值。
  • 使用 indices 方法和 zipWithIndex 方法都可以在遍历数组时获取索引,但推荐使用 indices 方法,因为它返回一个 Range,而 zipWithIndex 方法需要创建一个新的数组,可能会产生额外的开销。

您可以根据具体的需求和代码风格选择适合的遍历方式。每种方式都有其独特的优势,使您能够根据实际情况来进行灵活的数组遍历。

遍历二维数组的示例:

scalaCopy codeval matrix: Array[Array[Int]] = Array(
  Array(1, 2, 3),
  Array(4, 5, 6),
  Array(7, 8, 9)
)

// 遍历二维数组
for (row <- matrix; element <- row) {
    
    
  println(element)
}

输出:

1
2
3
4
5
6
7
8
9

在上述示例中,我们使用嵌套的 for 循环遍历了二维数组 matrix 中的每个元素,并将其打印出来。首先,外层循环遍历二维数组的每一行(一维数组),然后内层循环遍历每一行中的元素。

猜你喜欢

转载自blog.csdn.net/m0_47256162/article/details/132159586