数组是存储多个元素的容器,在 Scala 中,数组用于存储相同类型的元素集合。Scala 数组的大小是固定的,并且是可变的,允许你通过索引直接访问和修改元素。Scala 提供了丰富的数组操作方法,支持高效的数组处理。


📖 目录

  1. 数组的创建
  2. 访问数组元素
  3. 数组的常用方法
  4. 多维数组
  5. 数组与集合的转换
  6. 数组操作示例
  7. 参考资料

1. 数组的创建

在 Scala 中,创建数组可以通过以下几种方式:

使用 Array 构造函数:

val arr = new Array   // 创建一个包含 5 个整数的数组
println(arr.mkString(", "))  // 输出:0, 0, 0, 0, 0

  • new Array[T](size) 创建一个指定大小的数组,元素默认初始化为该类型的默认值(对于 Int 类型为 0,Stringnull 等)。

使用数组字面量:

val arr = Array(1, 2, 3, 4, 5)
println(arr.mkString(", "))  // 输出:1, 2, 3, 4, 5

  • 通过 Array 字面量创建数组,直接初始化数组元素。

2. 访问数组元素

数组中的元素是通过索引来访问的。索引从 0 开始,最大索引为数组长度减 1。

示例:

val arr = Array(1, 2, 3, 4, 5)
println(arr(0))  // 输出:1
arr(2) = 10      // 修改第三个元素
println(arr(2))  // 输出:10

  • 使用 arr(index) 可以获取数组元素的值,使用 arr(index) = value 可以修改指定位置的元素。

3. 数组的常用方法

Scala 提供了许多用于操作数组的内置方法,下面列出了几种常见的数组方法:

  • length: 返回数组的长度。
  • contains(element): 检查数组是否包含指定元素。
  • indexOf(element): 查找指定元素的索引。
  • updated(index, value): 返回一个新的数组,修改指定位置的元素。
  • reverse: 返回一个新的数组,元素顺序反转。

示例:

val arr = Array(1, 2, 3, 4, 5)
println(arr.length)       // 输出:5
println(arr.contains(3))  // 输出:true
println(arr.indexOf(4))   // 输出:3
val updatedArr = arr.updated(2, 100) // 创建一个新的数组,第三个元素改为 100
println(updatedArr.mkString(", "))   // 输出:1, 2, 100, 4, 5
println(arr.reverse.mkString(", "))  // 输出:5, 4, 3, 2, 1


4. 多维数组

Scala 支持多维数组,通常是通过嵌套数组来实现的。你可以创建二维数组或更高维度的数组。

二维数组示例:

val matrix = Array.ofDim[Int](3, 3)  // 创建一个 3x3 的二维数组
matrix(0)(0) = 1
matrix(1)(1) = 5
matrix(2)(2) = 9
println(matrix.map(_.mkString(", ")).mkString("\n"))

输出:

1, 0, 0
0, 5, 0
0, 0, 9

  • Array.ofDim[T](rows, cols) 用于创建指定行列的二维数组。
  • 使用 matrix(row)(col) 访问或修改二维数组的元素。

三维数组示例:

val threeDim = Array.ofDim[Int](2, 3, 4)  // 创建一个 2x3x4 的三维数组
threeDim(0)(1)(2) = 7
println(threeDim(0)(1)(2))  // 输出:7


5. 数组与集合的转换

Scala 中的数组和集合之间可以相互转换。

数组转集合:

val arr = Array(1, 2, 3, 4, 5)
val list = arr.toList  // 将数组转换为列表
println(list)  // 输出:List(1, 2, 3, 4, 5)

集合转数组:

val list = List(1, 2, 3, 4, 5)
val arr = list.toArray  // 将列表转换为数组
println(arr.mkString(", "))  // 输出:1, 2, 3, 4, 5

集合到数组的转换函数:

  • toList: 将数组转换为 List
  • toArray: 将集合(如 ListSeq)转换为数组。

6. 数组操作示例

遍历数组

val arr = Array(1, 2, 3, 4, 5)
for (elem <- arr) {
  println(elem)  // 输出:1, 2, 3, 4, 5
}

映射(transform)数组元素

val arr = Array(1, 2, 3, 4, 5)
val doubledArr = arr.map(_ * 2)  // 每个元素乘以 2
println(doubledArr.mkString(", "))  // 输出:2, 4, 6, 8, 10

过滤数组元素

val arr = Array(1, 2, 3, 4, 5)
val evenNumbers = arr.filter(_ % 2 == 0)  // 过滤出偶数
println(evenNumbers.mkString(", "))  // 输出:2, 4

折叠数组

val arr = Array(1, 2, 3, 4, 5)
val sum = arr.foldLeft(0)(_ + _)  // 计算数组的和
println(sum)  // 输出:15


7. 参考资料


Scala 中的数组操作灵活且高效,支持多种常见的操作和转换方法。通过掌握这些操作,你可以更加高效地处理集合数据,构建强大且高效的应用程序。