更新時間:2021-05-07 來源:黑馬程序員 瀏覽量:
對于每一門編程語言,數組(Array)都是重要的數據結構之一,主要用來存儲數據類型相同的元素。下面,針對Scala數組的定義與使用、數組遍歷以及數組轉換操作進行詳細介紹。
1.數組定義與使用Scala中的數組分為定長數組和變長數組,這兩種數組的定義方式如下:
new Array[T](數組長度) //定義定長數組 ArrayBuffer[T]() //定義變長數組
上述語法格式中,定義定長數組,需要使用new關鍵字,而定義變長數組時,則需要導包import scala.collection.mutable.ArrayBuffer。[T]表示的是數組元素的類型,T為泛型。
當我們定義好數組后,可以對數組進行追加、插入以及刪除等操作。針對不同的數組操作,Array提供了不同的API。
下面,我們通過一個例子來演示Scala數組簡單使用,具體代碼如文件1所示。
文件1 ArrayDemo.scala
import scala.collection.mutable.ArrayBuffer object ArrayDemo { def main(args: Array[String]) { //初始化一個長度為8的定長數組,其所有元素均為0 val arr1 = new Array[Int](8) //直接打印定長數組,內容為數組的hashcode值 println(arr1) //變長數組(數組緩沖) //如果使用數組緩沖,需要導入import scala.collection.mutable.ArrayBuffer val ab = ArrayBuffer[Int]() //向數組緩沖的尾部追加一個元素 //+=尾部追加元素 ab += 1 println(ab) //追加多個元素 ab += (2, 3, 4, 5) println(ab) //追加一個數組++= ab ++= Array(6, 7) println(ab) //追加一個數組緩沖 ab ++= ArrayBuffer(8,9) println(ab) //打印數組緩沖ab //在數組某個位置插入元素用insert,從某下標插入 ab.insert(0, -1, 0) println(ab) //刪除數組某個位置的元素用remove按照下標刪除 ab.remove(0) println(ab) } }上述代碼中,第5-7行代碼定義了一個定長數組arr1并打印數組對象;第10-30行代碼定義了一個變長數組ab并對數組對象進行了追加、插入和刪除等操作。
運行文件1中的代碼,控制臺輸出結果如圖1所示。
圖1 Scala數組定義與使用的輸出結果
2.數組遍歷
Scala中,如果想要獲取數組中的每一個元素,則需要將數組進行遍歷操作。數組的遍歷有三種方式,分別是for循環(huán)遍歷、while循環(huán)遍歷以及do...while循環(huán)遍歷。在這里,我們使用for循環(huán)對數組進行遍歷操作。具體代碼如文件2所示。
文件2 ArrayTraversal.scala
object ArrayTraversal { def main(args: Array[String]) { var myArr = Array(1.9, 2.9, 3.4, 3.5) // 打印輸出所有的數組元素 for (x <- myArr) { print(x + " ") } //打印換行 println() // 計算數組所有元素的總和 var total = 0.0; for (i <- 0 to (myArr.length - 1)) { total += myArr(i); } println("總和為 " + total); // 查找數組中的最大元素 var max = myArr(0); for (i <- 1 to (myArr.length - 1)) { if (myArr(i) > max) max = myArr(i); } println("最大值為 " + max); } }
上述代碼中,第3-7行代碼定義了一個定長數組myArr并通過遍歷打印該數組;第11-15行代碼定義一個變量total并賦值為0.0,通過遍歷計算數組所有元素的總和;第17-21行定義了一個變量max并賦值為數組myArr中的第一個元素,通過遍歷查找出myArr數組中的最大元素。
運行文件2中的代碼,控制臺輸出結果如圖2所示。
圖2 遍歷數組的控制臺打印輸出
3.數組轉換
數組轉換就是通過yield關鍵字將原始的數組進行轉換,會產生一個新的數組,然而原始的數組保持不變。下面我們來演示數組的轉換,定義一個數組,實現(xiàn)將偶數取出乘以10后生成一個新的數組,具體代碼如文件3所示。
文件3 ArrayYieldTest.scala
object ArrayYieldTest { def main(args: Array[String]) { //定義一個數組 val arr = Array(1, 2, 3, 4, 5, 6, 7, 8, 9) //將偶數取出乘以10后再生成一個新的數組 val newArr = for (e <- arr if e % 2 == 0) yield e * 10 println(newArr.toBuffer) } }
上述代碼中,第4-7行代碼定義了一個定長數組arr并通過求偶和算術操作,將數組arr轉換成一個新數組newArr,最終打印newArr數組。
運行文件3中的代碼,控制臺輸出結果如圖3所示。
圖3 數組轉換的控制臺輸出
猜你喜歡: