1. 程式人生 > >scala陣列操作之Array、ArrayBuffer以及遍歷陣列

scala陣列操作之Array、ArrayBuffer以及遍歷陣列


Array
    在Scala中,Array代表的含義與Java中類似,也是長度不可改變的陣列。此外,由於Scala與Java都是執行在JVM中,雙方可以互相呼叫,因此Scala陣列的底層實際上是Java陣列。例如字串陣列在底層就是Java的String[],整數陣列在底層就是Java的Int[]。  

 // 陣列初始化後,長度就固定下來了,而且元素全部根據其型別初始化
    val a = new Array[Int](10)
    a(0)
    a(0) = 1
    val a = new Array[String](10)

    // 可以直接使用Array()建立陣列,元素型別自動推斷
    val a = Array("hello", "world")
    a(0) = "hi"
    val a = Array("leo", 30)

ArrayBuffer
    在Scala中,如果需要類似於Java中的ArrayList這種長度可變的集合類,則可以使用ArrayBuffer。  

 // 如果不想每次都使用全限定名,則可以預先匯入ArrayBuffer類
    import scala.collection.mutable.ArrayBuffer
    // 使用ArrayBuffer()的方式可以建立一個空的ArrayBuffer
    val b = ArrayBuffer[Int]()
    // 使用+=操作符,可以新增一個元素,或者多個元素
    // 這個語法必須要謹記在心!因為spark原始碼裡大量使用了這種集合操作語法!
    b += 1
    b += (2, 3, 4, 5)
    // 使用++=操作符,可以新增其他集合中的所有元素
    b ++= Array(6, 7, 8, 9, 10)
    // 使用trimEnd()函式,可以從尾部截斷指定個數的元素
    b.trimEnd(5)

    // 使用insert()函式可以在指定位置插入元素
    // 但是這種操作效率很低,因為需要移動指定位置後的所有元素
    b.insert(5, 6)
    b.insert(6, 7, 8, 9, 10)
    // 使用remove()函式可以移除指定位置的元素
    b.remove(1)
    b.remove(1, 3)
    // Array與ArrayBuffer可以互相進行轉換
    b.toArray
    a.toBuffer

遍歷Array和ArrayBuffer
  

  // 使用for迴圈和until遍歷Array / ArrayBuffer
    // 使until是RichInt提供的函式
    for (i <- 0 until b.length)
      println(b(i))
    // 跳躍遍歷Array / ArrayBuffer
    for(i <- 0 until (b.length, 2))
      println(b(i))
    // 從尾部遍歷Array / ArrayBuffer
    for(i <- (0 until b.length).reverse)
      println(b(i))
    // 使用“增強for迴圈”遍歷Array / ArrayBuffer
    for (e <- b)
      println(e)


陣列常見操作
  

 // 陣列元素求和
    val a = Array(1, 2, 3, 4, 5)
    val sum = a.sum
    // 獲取陣列最大值
    val max = a.max
    // 對陣列進行排序
    scala.util.Sorting.quickSort(a)
    // 獲取陣列中所有元素內容
    a.mkString
    a.mkString(", ")
    a.mkString("<", ",", ">")
    // toString函式
    a.toString
    b.toString