# 陣列
## What: 什麼是陣列
將相同型態的變數集合起來,以一個名稱代表。
例如:同一個班級裡的學生姓名、同一個班級裡的學生分數。
## How: 怎麼在C#裡面使用陣列
### Declaration
```csharp
// 方法一
型別[] 陣列名稱;
// 方法二
型別[] 陣列名稱 = new 型別[陣列長度];
```
```csharp
// 陣列名稱宣告
string[] classOfSunflower;
// 陣列長度宣告
string[] classOfSunflower = new string[3];
```
### Initialization
```csharp
// 方法一
型別[] 陣列名稱 = new 型別[陣列長度]{初始值};
// 方法二
型別[] 陣列名稱 = {初始值};
```
```csharp
// 陣列長度+初始值
string[] classOfSunflower = new string[3] { "Alex", "Ken", "Leo" };
// 初始值
int[] scoresOfSunflower = { 89, 59, 69 };
```
### Read
```csharp
int scoreOfAlex = scoresOfSunflower[0];
```
```csharp
// 讀取Alex的分數
int scoreOfAlex = scoresOfSunflower[0];
```
### Update
```csharp
scoresOfSunflower[0] = 84;
```
```csharp
// 修改Alex的分數
scoresOfSunflower[0] = 79;
```
> 用index可以獲取陣列內的個別元素
> 關鍵字: [IList](https://learn.microsoft.com/zh-tw/dotnet/api/system.collections.ilist?view=net-7.0)
## Why: 為什麼要使用陣列
**性質相同 ⇒ 做相同的事**
情境一:印出向日葵班裡面每個學生的名字
使用foreach陳述式
關鍵字: [IEnumerable](https://learn.microsoft.com/zh-tw/dotnet/api/system.collections.ienumerable?view=net-8.0)
```csharp
Consile.WriteLine(classOfSunflower); //System.Int32[]
// Console.WriteLine() 方法對於非基本型別的物件(例如自定義類別、結構、陣列等)預設會印出其型別名稱而不是內容。
foreach (string name in classOfSunflower)
{ Console.WriteLine(name); }
```
情境二:期末考太難,總成績加五分
使用for陳述式
```csharp
for (int i = 0; i < scoresOfSunflower.Length; i++)
{ scoresOfSunflower[i] += 5; }
```
## 二維陣列
### Declaration
```csharp
// 方法一
型別[,] 陣列名稱 = new 型別[row number,column number];
// 方法二
型別[,] 陣列名稱 = new 型別[row number,column number]{初始值};
```
```csharp
int[,] arrA = new int[2, 2];
arrA[0, 0] = 5;
arrA[0, 1] = 6;
arrA[1, 0] = 7;
arrA[1, 1] = 8;
int[,] arrB = new int[2, 2] { { 1, 2 }, { 3, 4 } };
```

### 二維陣列相加

```csharp
// arrA + arrB = arrC
int[,] arrC = new int[2, 2];
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 2; j++)
{
arrC[i, j] = arrA[i, j] + arrB[i, j];
}
}
foreach (int c in arrC)
{ Console.WriteLine(c); }
```
### 矩陣相乘

## 陣列常用的屬性及方法
[參考網址](https://learn.microsoft.com/zh-tw/dotnet/api/system.array?view=net-7.0#properties)
```csharp
// 2*2的矩陣乘以2*1的矩陣
int[,] matrixA = new int[2, 3] { { 1, 2, 3 }, { 4, 5, 6 } };
int[,] matrixB = new int[3, 1] { { 7 }, { 8 }, { 9 } };
int[,] matrixC = new int[2, 1];
// matrixA * matrixB = matrixC
for (int row = 0; row < 2; row++)
{
for (int column = 0; column < 1; column++)
{
for (int inner = 0; inner < 3; inner++)
{
matrixC[row, column] += matrixA[row, inner] * matrixB[inner, column];
}
}
}
```
Length: 取得陣列所有維度的元素總數。
Rank: 取得陣列的維度數目。
GetLength(): 取得代表陣列指定維度之項目數目。
## 練習時間
1. 利用一維陣列求10個數字的計算平均值(p.7)
2. 輸入10個數字至A陣列,再輸入x,判斷x是否存在於A陣列中,如果存在,輸出所在的註標(索引)值,若不存在,則告知不存在。(p.11)
3. 求兩個2*4的二維矩陣相加之結果,第一個及第二個矩陣分別以A及B表示,相加之結果存入C矩陣,最後將C矩陣內容顯示出來。(p.14)