# Scala陣列

Scala提供了一種資料結構叫作陣列，陣列是一種儲存了相同型別元素的固定大小順序集合。陣列用於儲存資料集合，但將陣列視為相同型別變數的集合通常更為有用。

## 宣告陣列變數

``````var z:Array[String] = new Array[String](3)

// 或者

var z = new Array[String](3)
``````

``````z(0) = "Zara"; z(1) = "Nuha"; z(4/2) = "Ayan"
``````

``````var z = Array("Maxsu", "Nancy", "Alen")
``````

## 處理處理

``````object Demo {
def main(args: Array[String]) {
var myList = Array(1.9, 2.9, 3.4, 3.5)

// Print all the array elements
for ( x <- myList ) {
println( x )
}

// Summing all elements
var total = 0.0;

for ( i <- 0 to (myList.length - 1)) {
total += myList(i);
}
println("Total is " + total);

// Finding the largest element
var max = myList(0);

for ( i <- 1 to (myList.length - 1) ) {
if (myList(i) > max) max = myList(i);
}

println("Max is " + max);
}
}
``````

``````D:\>scalac Demo.scala
D:\>scala Demo

1.9
2.9
3.4
3.5
Total is 11.7
Max is 3.5
``````

Scala不直接支援各種陣列操作，它提供各種方法來處理任何維度的陣列。 如果要使用不同的方法，則需要匯入`Array._`包。

## 多維陣列

``````var myMatrix = ofDim[Int](3,3)
``````

``````import Array._

object Demo {
def main(args: Array[String]) {
var myMatrix = ofDim[Int](3,3)

// build a matrix
for (i <- 0 to 2) {
for ( j <- 0 to 2) {
myMatrix(i)(j) = j;
}
}

// Print two dimensional array
for (i <- 0 to 2) {
for ( j <- 0 to 2) {
print(" " + myMatrix(i)(j));
}
println();
}
}
}
``````

``````D:\>scalac Demo.scala
D:\>scala Demo

0 1 2
0 1 2
0 1 2
``````

## 連線陣列

``````import Array._

object Demo {
def main(args: Array[String]) {
var myList1 = Array(1.9, 2.9, 3.4, 3.5)
var myList2 = Array(8.9, 7.9, 0.4, 1.5)

var myList3 =  concat( myList1, myList2)

// Print all the array elements
for ( x <- myList3 ) {
println( x )
}
}
}
``````

``````D:\>scalac Demo.scala
D:\>scala Demo

1.9
2.9
3.4
3.5
8.9
7.9
0.4
1.5
``````

## 使用範圍建立陣列

``````import Array._

object Demo {
def main(args: Array[String]) {
var myList1 = range(10, 20, 2)
var myList2 = range(10,20)

// Print all the array elements
for ( x <- myList1 ) {
print( " " + x )
}

println()
for ( x <- myList2 ) {
print( " " + x )
}
}
}
``````

``````D:\>scalac Demo.scala
D:\>scala Demo

10 12 14 16 18
10 11 12 13 14 15 16 17 18 19
``````

## Scala陣列方法

1 `def apply( x: T, xs: T* ): Array[T]` 建立一個`T`物件陣列，其中`T`可以是：`Unit``Double``Float``Long``Int``Char``Short``Byte``Boolean`
2 `def concat[T]( xss: Array[T]* ): Array[T]` 將所有陣列連線成一個陣列。
3 `def copy( src: AnyRef, srcPos: Int, dest: AnyRef, destPos: Int, length: Int ): Unit` 將一個陣列複製到另一個。 相當於Java的`System.arraycopy(src，srcPos，dest，destPos，length)`
4 `def empty[T]: Array[T]` 返回長度為`0`的陣列
5 `def iterate[T]( start: T, len: Int )( f: (T) => T ): Array[T]` 返回一個包含函式的重複應用程式到一個起始值的陣列。
6 `def fill[T]( n: Int )(elem: => T): Array[T]` 返回一個包含某些元素計算結果的陣列。
7 `def fill[T]( n1: Int, n2: Int )( elem: => T ): Array[Array[T]]` 返回一個包含一些元素計算結果的二維陣列。
8 `def iterate[T]( start: T, len: Int)( f: (T) => T ): Array[T]` 返回一個包含一個函式的重複應用程式到一個起始值的陣列。
9 `def ofDim[T]( n1: Int ): Array[T]` 建立具有給定維度的陣列。
10 `def ofDim[T]( n1: Int, n2: Int ): Array[Array[T]]` 建立一個二維陣列
11 `def ofDim[T]( n1: Int, n2: Int, n3: Int ): Array[Array[Array[T]]]` 建立一個`3`維陣列
12 `def range( start: Int, end: Int, step: Int ): Array[Int]` 返回一個整數間隔中包含相等間隔值的陣列。
13 `def range( start: Int, end: Int ): Array[Int]` 返回一個包含一個範圍內增加整數序列的陣列。
14 `def tabulate[T]( n: Int )(f: (Int)=> T): Array[T]` `0`開始的整數值範圍內，返回一個包含給定函式值的陣列。
15 `def tabulate[T]( n1: Int, n2: Int )( f: (Int, Int ) => T): Array[Array[T]]` 返回一個二維陣列，其中包含從`0`開始的整數值範圍內給定函式的值。