目錄
- 第四章
- 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*/
上面示例創建了不同大小的二維數組, 并使用不同的方法初始化二維數組, 訪問了二維數組的一個元素或遍歷二維數組 .