好程式設計師大資料學習路線分享Scala系列之陣列

好程式設計師IT發表於2019-09-03

好程式設計師大資料學習路線分享Scala系列之陣列, 陣列(Array)

1.  定長陣列

建立一個定長陣列的方式


使用Array定義一個長度不變的陣列

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 ,值為 10 的定長陣列
     val arr2 = Array[Int](10)
     // 輸出陣列元素值
    println(arr2.toBuffer)

     // 定義一個長度為 3 的定長陣列
     val arr3 = Array("hadoop", "storm", "spark")
     // 使用 () 來訪問元素
    println(arr3(2))

     // 包含 10 個整數的陣列,初始化值為
     val nums =  new Array[Int](10)
     // 遍歷陣列
     for(i <- 0 until nums.length)
      print(s"$i:${nums(i)} ")
      println()

     // 包含 10 個字串的陣列,初始化值為 null
     val strs0 =  new Array[String](10)
     for(i <- 0 until strs0.length)
      print(s"$i:${strs0(i)} ")
      println()

     // 賦初值的字串陣列
     val strs1 = Array("hello" ,"world")
     for(i <- 0 until strs1.length)
      print(s"$i:${strs1(i)} ")
      println()

     // 訪問並修改元素值
    strs1(0) = "byebye"
     for(i <- 0 until strs1.length)
      print(s"$i:${strs1(i)} ")
      println()

  }
}

result

2.  變長陣列

定義變長陣列的方式:


使用 ArrayBuffer定義長度按需變化的陣列。

import scala.collection.mutable.ArrayBuffer

object VarArrayDemo {
   def main(args: Array[String]){
     // 定義一個空的可變長 Int 型陣列
     val nums =  ArrayBuffer[Int]()

     // 在尾端新增元素
    nums += 1

     // 在尾端新增多個元素
    nums += (2,3,4,5)

     // 使用 ++= 在尾端新增任何集合
    nums ++= Array(6,7,8)

    // 這些運算子,有相應的  -=  --= 可以做陣列的刪減,用法同 += ++=
      
    // 使用 append 追加一個或者多個元素
    nums.append(1)
    nums.append(2,3)
      
    // 在下標 2 之前插入元素
    nums.insert(2,20)
    nums.insert(2,30,30)    

     // 移除最後 2 元素
    nums.trimEnd(2)
     // 移除最開始的一個或者多個元素
    nums.trimStart(1)
   
     // 從下標 2 出移除一個或者多個元素
    nums.remove(2)
    nums.remove(2,2)
      
      
    // 使用增強 for 迴圈進行陣列遍歷   
     for(elem <- nums)
      println(elem)
      
     // 基於下標訪問使用增強 for 迴圈進行陣列遍歷
     for(i <- 0 until nums.length)
      println(nums(i))

  }
}

執行結果:


3.  遍歷陣列

1.增強for迴圈,參見變長陣列的程式碼

2.好用的until會生成腳標,0 until 10 包含0不包含10 參見定長陣列部分程式碼4.1.4. 陣列轉換

4.  陣列轉換

yield關鍵字將原始的陣列進行轉換會產生一個新的陣列,原始的陣列不變

bject ArrayTransfer {

   def main(args: Array[String]): Unit = {

     // 使用 for 推導式生成一個新的陣列
     val a = Array(1, 2, 3, 4, 5, 6, 7, 8, 9)
     val res1 =  for(elem <- a)  yield 2*elem
     for(elem <- res1)
      print(elem+" ")
    println()

     // 對原陣列元素過濾後生成一個新的陣列
     // 將偶數取出乘以 10 後再生成一個新的陣列
     val res2 =  for(elem <- a  if elem%2 == 0) yield 2*elem
     for(elem <- res2)
      print(elem+" ")
    println()

     // 使用 filter map 轉換出新的陣列
     val res3 = a.filter(_ % 2 == 0).map(2 * _)
     for(elem <- res3)
      print(elem+" ")
    println()
  }

執行結果:


5.  陣列常用演算法

Scala中,陣列上的某些方法對陣列進行相應的操作非常方便!

object ArrayAlgorithm {
   def main(args: Array[String]): Unit = {

     val a = Array(9, 1, 2, 5, 3, 7, 8, 4)

     // 求和
     val res1 = a.sum
    println(res1)

     // 求最大值
     val res2 = a.max
    println(res2)

     // 排序
     val res3 = a.sorted
     // val res4 = a.sortWith(_>_) 指定排序方式
     for(elem <- res3)
      print(elem + " ")
  }
}

執行結果:


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69913892/viewspace-2655873/,如需轉載,請註明出處,否則將追究法律責任。

相關文章