数组是存储多个元素的容器,在 Scala 中,数组用于存储相同类型的元素集合。Scala 数组的大小是固定的,并且是可变的,允许你通过索引直接访问和修改元素。Scala 提供了丰富的数组操作方法,支持高效的数组处理。
📖 目录
1. 数组的创建
在 Scala 中,创建数组可以通过以下几种方式:
使用 Array
构造函数:
val arr = new Array // 创建一个包含 5 个整数的数组
println(arr.mkString(", ")) // 输出:0, 0, 0, 0, 0
new Array[T](size)
创建一个指定大小的数组,元素默认初始化为该类型的默认值(对于Int
类型为 0,String
为null
等)。
使用数组字面量:
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
: 将集合(如List
或Seq
)转换为数组。
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 中的数组操作灵活且高效,支持多种常见的操作和转换方法。通过掌握这些操作,你可以更加高效地处理集合数据,构建强大且高效的应用程序。
发表回复