scala陣列操作之Array、ArrayBuffer以及遍歷陣列
阿新 • • 發佈:2018-12-02
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