### 1. 定長數組
- Scala定義用到Array,定義如下。
~~~
val nums = new Array[Int](10) // 10個整數數組,初始化為0,String初始化為null
val s = Array("hello", "world") // 已經提供初始值就不需要new
s(0) // 調用時用的是()而不是[]
~~~
### 2. 變長數組:數組緩沖
- 變長數組用到ArrayBuffer。
~~~
import scala.collection.mutable.ArrayBuffer// 頭文件
val b = ArrayBuffer[Int]() // 一個空數組緩沖
b += 1 // 在尾端添加元素
b += (1, 2, 3, 4) // 在尾端添加多個元素
b ++= Array(7, 9, 8) // ++=可以追加任何一個集合
b.trimEnd(3) // 移除最后3個元素
b.insert(2, 5) // 下標2之前插入5
b.insert(2, 4, 5, 8) // 下標2之前插入多個數
b.remove(2) // 將2號下標移除
b.remove(2, 3) // 從2號下標開始移除3個元素
b.toArray // 把b從ArrayBuffer轉成Array
b.toBuffer // 把b從Array轉成ArrayBuffer
~~~
### 3. 遍歷數組和數組緩沖
- 用for循環,until返回所有小于(不包括)上限的數字。
~~~
for (i <- 0 until b.length)
{
println(i + ": " + b(i)) // i是從0到b.length-1
}
~~~
- 也可以不用下標,直接訪問數組。
~~~
for (i <- b)
{
println(i) // i就是數組中存的每個量
}
~~~
- 每兩個數字一跳,i的遍歷如下。
~~~
0 until (b.lenght, 2)
~~~
- 從數組尾部開始,i的遍歷如下。
~~~
(0 until b.lenght).reverse
~~~
### 4. 數組轉換
- 轉換不改變元數組,產生一個新數組。用for(…)yield來進行數組轉換。
~~~
val result = for (elem <- b if elem % 2 == 0) yield 2 * elem // 去掉奇數元素,對偶數元素翻倍
// 另外一種做法如下:
b.filter(_ % 2 == 0).map(2 * _)
// 或者
b.filter { _ % 2 == 0} map { 2 * _ }
~~~
### 5. 常用算法
- 常用算法如下:
~~~
Array(1, 4, 8).sum // 直接求和,對ArrayBuffer也一樣,還有max,min
val a = b.sorted // b沒有改變,將排序好的結果賦值給a
val c = b.sortWith(_>_) // 通過sortWith函數將b降序排列
~~~
- 可直接對Array排序,但不能對ArrayBuffer排序。
~~~
val a = Array(9, 3, 1)
scala.util.Sorting.quickSort(a) // a現在是Array(1, 3, 9)
~~~
- 顯示Array或ArrayBuffer內容,可以用mkString,可以指定分隔符,及前后綴。
~~~
a.mkString(" and ")
//"1 and 3 and 9"
a.mkString("<", ",", ">")
//"<1,3,9>
~~~
### 6. 多維數組
- 用ofDim方法構造二維數組。
~~~
val m = Array.ofDim[Double](3, 4) // 三行,四列
m(row)(colum) = 2 // 元素訪問
~~~
【待續】