目录
- 第四章
- 1- 定长数组
- 2- 变长数组
- 3- 遍历数组和数组缓存
- 4- 数组转换
- 5- 常用算法
- 6- 多维数组
- end
第四章
1- 定长数组
在Scala中, 定长数组可以使用 Array
类来创建;
定长数组在创建时需要指定数组的长度, 并且长度在整个数组生命周期中保持不变;
示例:
// 定义一个定长数组val fixeArray = new Array[Int](5)// 给定长数组赋值fixeArray(0) = 1fixeArray(1) = 2fixeArray(2) = 3fixeArray(3) = 4fixeArray(4) = 5// 遍历数组 并打印for (i <- 0 until fixeArray.length) {println(fixeArray(i)) // 输出: 1 2 3 4 5}
在上面示例中, 我们首先创建了一个长度为5的定长整型数组 fixedArray
, 然后分别给数组的每个位置赋值, 并最后通过循环访问并打印数组中的元素;
定长数组在Scala中是一种常见的数据结构, 使用于需要固定长度的情况 .
2- 变长数组
在Scala中, 变长数组通常使用 ArrayBuffer
来实现;
ArrayBuffer
是可变长度的数组, 可以动态添加或删除元素, 是一种常用的数据结构;
示例:
import scala.collection.mutable.ArrayBuffer// 创建一个空的变长数组 ArrayBufferval dynamicArray = new ArrayBuffer[Int]()// 向 ArrayBuffer 中添加元素dynamicArray += 10dynamicArray += 20dynamicArray += 30// 打印 ArrayBuffer 中的元素println(dynamicArray) // 输出: ArrayBuffer(10, 20, 30)// 通过循环访问 ArrayBuffer 中的元素for (elem <- dynamicArray) {println(elem) // 输出: 10 20 30}// 从ArrayBuffer 中删除元素dynamicArray -= 20// 打印移除元素后的 ArrayBufferprintln(dynamicArray) // 输出: ArrayBuffer(10, 30)
通过使用 ArrayBuffer
, 可以方便地操作变长数组, 动态添加或删除元素以满足不同需求 .
3- 遍历数组和数组缓存
在Scala中, 遍历数组可以使用循环结构或者高阶函数来实现;
对应数据缓存, 可以使用 ArrayBuffer
来动态管理数据组大小;
示例:
// 遍历数组, 数组缓存import scala.collection.mutable.ArrayBuffer// 创建一个普通数组val arr = Array(1, 2, 3, 4, 5)// 遍历数组并打印每个元素for (elem <- arr) {println(elem) // 输出: 1, 2, 3, 4, 5}for (i <- 0 until arr.length) {println(arr(i)) // 输出: 1, 2, 3, 4, 5}// 使用高阶函数遍历数组arr.foreach(elem => println(elem)) // 输出: 1, 2, 3, 4, 5// 创建一个数组缓存val buffer = ArrayBuffer[Int]()// 向数组缓存中添加元素buffer += 10buffer += 20buffer += 30// 遍历并打印数组缓存中的元素for (elem <- buffer) {println(elem) // 输出: 10, 20, 30}// 使用高阶函数遍历数组缓存buffer.foreach(elem => println(elem)) // 输出: 10, 20, 30
上面示例, 可以了解如何在Scala中遍历数组以及使用数组缓存;
遍历数组可以通过循环或高阶函数实现, 而数组缓存则可以使用 ArrayBuffer
来动态管理数组大小 .
4- 数组转换
在Scala中, 可以使用 map
函数对数组进行转换;
map
函数可以将数组中的每个元素应用于指定的函数, 并返回一个新的数组, 其中包含应用函数后的结果;
示例:
val arr = Array(1, 2, 3, 4, 5)// 使用 map 函数对数组进行转换, 将每个元素乘2val transformedArr = arr.map(x => x * 2)// 打印转换后的数组println(transformedArr.mkString(", ")) // 输出: 2, 4, 6, 8, 10// 增加过滤条件(能被2整除的元素乘2), 数组进行准换val filteredArr = arr.filter(x => x % 2 == 0).map(x => x * 2)// 打印转换后的数组println(filteredArr.mkString(", ")) // 输出: 4, 8
在上述示例中, 我们创建了一个整数数组 arr
, 然后使用 map
函数对数组中的每个元素进行乘2操作(使用 filter
函数对数组元素进行过滤), 得到一个新的数组, 打印转换后的数组内容 ;
通过使用 map
函数, 可以方便地对数组进行转换操作 .
5- 常用算法
在Scala中, 数组常用的算法包括求和、查找最大最小值、排序以及显示数组内容等操作;
示例:
- 求和
// 数组求和val arr = Array(1, 2, 3, 4, 5)val sum = arr.sumprintln(s"数组元素之和为: $sum") // 输出: 数组元素之和为: 15
- 查找最大最小值
// 查找数组最大最小值val arr = Array(10, 12, 31, 24, 5)val max = arr.maxval min = arr.minprintln(s"max: $max, min: $min") // 输出: max: 31, min: 5
- 排序
// 数组排序val arr = Array(1, 3, 2, 5, 4)val sortedArr = arr.sortedprintln("数组排序后: " + sortedArr.mkString(",")) // 输出: 数组排序后: 1,2,3,4,5
- 显示数组内容
// 显示数组内容val arr = Array("lyf", "wdf", "fkc")for (i <- 0 until arr.length) {println(arr(i)) // 输出: lyf wdf kfc}for (i <- arr) {println(i) // 输出: lyf wdf kfc}for (i <- arr.indices) {println(arr(i)) // 输出: lyf wdf kfc}println(arr.mkString(", ")) // 输出: lyf, wdf, kfcarr.foreach(println) // 输出: lyf wdf kfc
6- 多维数组
在Scala中, 可以使用多维数组来表示多维数据结构;
通常, 可以使用数组的数组 (Array of Array) 来实现多维数组 ;
示例:
// 创建一个二维数组表示矩阵val matrix = Array.ofDim[Int](3, 3)// 初始化二位数组matrix(0) = scala.Array(1, 2, 3)matrix(1) = scala.Array(4, 5, 6)matrix(2) = scala.Array(7, 8, 9)// 访问二维数组中的元素val element = matrix(1)(2)println(s"二维数组中第二行第三列的元素为: $element") // 输出: 二维数组中第二行第三列的元素为: 6
// 创建一个二维数组val matrix = Array.ofDim[Int](3, 4)// 初始化二维数组for (i <- 0 until matrix.length) {for (j <- 0 until matrix(i).length) {matrix(i)(j) = i * j}}// 打印二维数组for (i <- 0 until matrix.length) {for (j <- 0 until matrix(i).length) {print(matrix(i)(j) + " ")}println() // 换行}/*输出:0 0 0 0 0 1 2 3 0 2 4 6 */
// 创建一个二维数组val matrix = Array.ofDim[Int](2, 2)// 初始化二维数组matrix(0)(0) = 1matrix(0)(1) = 2matrix(1)(0) = 3matrix(1)(1) = 4for (i <- 0 until matrix.length) {for (j <- 0 until matrix(i).length) {print(matrix(i)(j) + " ")}println()}/*输出:1 23 4*/
上面示例创建了不同大小的二维数组, 并使用不同的方法初始化二维数组, 访问了二维数组的一个元素或遍历二维数组 .