1. 程式人生 > >【圖文詳細 】Scala——Scala 陣列 Array

【圖文詳細 】Scala——Scala 陣列 Array

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、多維陣列