Scala學習七:數組
Scala中有 變長數組 和 定長數組。Scala的數組以Java數組實現。
Scala 數組大小 及 訪問數組元素 用"小括號 ()" 修飾。
Java 數組大小 及 訪問數組元素 用 "中括號 []" 修飾。
Scala 不指定數組大小,用元素直接初始化數組 用 "小括號()" 修飾。
Java 不指定數組大小,用元素直接初始化數組 用 "大括號{}" 修飾
Scala代碼:
// 定長數組:scala.ArrayArray
val arr = new Array[Int](10)
arr(0) = 1
val arr2 = Array(1,2,3)
println(arr2(2))
// 變長數組:
scala.collection.mutable.ArrayBuffer
val arrBuf = new ArrayBuffer[String](10)
// 變長數組可以不指定數組大小
val arrBuf2 = new ArrayBuffer[String]
val arrBuf3 = ArrayBuffer("a","b","c")
Java代碼:
int[] arr = new int[10];
arr[0] = 0;
String[] arrStr = new String[10];
String[] arrStr2 = new String[]{"a","b","c"};
System.out.println(arrStr2[2])
在數組尾部插入元素 或 集合操作是高效的。
但是在數據中間插入 元素 或 集合 操作是低效的,因爲所有元素都必須被向後平移。
Scala中數組迭代有3種方式:
println("------- ArrayBuffer [foreach] ")
arrBuf2.foreach(e=>{
println(" element = " + e)
})
println("------- ArrayBuffer [for until] ")
// for(a <- 0.until(3)){
// 0 until 3 '等於==' 0.until(3)
for(a <- 0 until 3){
println(arrBuf2(a))
}
println("------- ArrayBuffer [for element] ")
// 不用下標,直接訪問數組元素
for(a <- arrBuf2){
println(a)
}
對數組的很大比例的基本都是在排序,求和,Scala支持對數據進行方便快捷的操作。
println("------- Array [init] ")
val arr = new Array[Int](10)
val arr2 = Array(2, 1, 3)
println("------- Array [sum] ")
println(" sum = " + arr2.sum)
println(" max = " + arr2.max)
println(" min = " + arr2.min)
// 排序並不修改原始版本,而是產生一個新集合
println(" sort = " + arr2.sorted.mkString(","))
Scala中可以排序的數據必須支持比較操作,包括數字,字符串,或其他帶有Ordered物質的數據。
Scala常用的幾種排序:
sortBy: sortBy[B](f: (A) ⇒ B)(implicit ord: math.Ordering[B]): List[A] 按照應用函數f之後產生的元素進行排序
sorted: sorted[B >: A](implicit ord: math.Ordering[B]): List[A] 按照元素自身進行排序
sortWith: sortWith(lt: (A, A) ⇒ Boolean): List[A] 使用自定義的比較函數進行排序