【圖文詳細 】Scala——Scala 陣列 Array
阿新 • • 發佈:2018-12-24
4、Scala 陣列 Array
4.1、定長陣列和變長陣列
1、由於 Array 是不可變(長度不可變)的,初始化之初就有了固定的長度,所以不能直接 地對其元素進行刪除操作,也不能多增加元素,只能修改某個位置的元素的值,要實現刪除 可以通過過濾生成新的 Array 的方式來刪除不要的元素。所以也就沒有 add,insert,remove 等 操作。
2、而 ArrayBuffer 是可變的,本身提供了很多元素的操作,當然包括增加,刪除操作。
3、如果你需要在 Array 和 ArrayBuffer 之間轉換,那麼分別呼叫 toBuffer()和 toArray()方法即可
package com.mazh.scala.core import scala.collection.mutable.ArrayBuffer object ArrayDemo { def main(args: Array[String]) { // 初始化一個長度為 8 的定長陣列,其所有元素均為 0 val arr1 = new Array[Int](8) // 直接列印定長陣列,內容為陣列的 hashcode 值 println(arr1) // 將陣列轉換成陣列緩衝,就可以看到原陣列中的內容了 //toBuffer 會將陣列轉換長陣列緩衝 println(arr1.toBuffer) // 注意:如果 new ,相當於呼叫了陣列的 apply 方法,直接為陣列賦值 // 初始化一個長度為 1 的 定長陣列 val arr2 = Array[Int](10) println(arr2.toBuffer) // 定義一個長度為 3 的定長陣列 val arr3 = Array("hadoop", "storm", "spark") // 使用 () 來訪問元素 println(arr3(2)) ////////////////////////////////////////////////// // 變長陣列(陣列緩衝) // 如果想使用陣列緩 衝,需要匯入 import scala.collection.mutable.ArrayBuffer 包 val ab = ArrayBuffer[Int]() // 向陣列緩衝的尾部追加一個元素 //+= 尾部追加元素 ab += 1 // 追加多個元素 ab += (2, 3, 4, 5) // 追加一個數組 ++= ab ++= Array(6, 7) // 追加一個數組緩衝 ab ++= ArrayBuffer(8,9) // 打 印陣列緩衝 ab // 在陣列某個位置插入元素用 insert ab.insert(0, -1, 0) // 刪除陣列某個位置的元素用 remove ab.remove(8, 2) println(ab) } }
4.2、遍歷陣列
1、增強 for 迴圈
2、使用 to 可以生成序列,0 to 10 包含 0 包含 10
3、好用的 until 會生成腳標,0 until 10 包含 0 不包含 10
package com.mazh.scala.core object ArrayForDemo { def main(args: Array[String]) { // 初始化一個數組 val arr = Array(1,2,3,4,5,6,7,8) // 增強 for迴圈 for(i <- arr) println(i) // 使用 to可以生成一個序列作為腳標 for(i <- (0 to arr.length - 1).reverse) println(arr(i)) // 好用的 until會生成一個 Range,reverse是將前面生成的 Range反轉 for(i <- (0 until arr.length).reverse) println(arr(i)) // 步長為 2 for(i <- (0 until (arr.length, 2)).reverse) println(arr(i)) } }
4.3、陣列轉換
yield 關鍵字將原始的陣列進行轉換會產生一個新的陣列,原始的陣列不變
package com.mazh.scala.core
object ArrayYieldDemo {
def main(args: Array[String]) {
// 定義一個數組 val arr = Array(1, 2, 3, 4, 5, 6, 7, 8, 9)
// 將偶數取出乘以 10後再生成一個新的陣列
val res = for (e <- arr if e % 2 == 0) yield e * 10
println(res.toBuffer)
// 更高階的寫法 , 用著更爽
//filter 是過濾,接收一個返回值為 boolean的函式
//map相當於將陣列中的每一個元素取出來,應用傳進去的函式
val r = arr.filter(_ % 2 == 0).map(_ * 10)
println(r.toBuffer)
}
}
4.4、陣列常用演算法
在 Scala 中,陣列上的某些方法對陣列進行相應的操作非常方便!
4.5、多維陣列