---
# System prepended metadata

title: 陣列

---

 # 陣列
 ## 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 } };
 ```
 ![宣告二維陣列](https://hackmd.io/_uploads/SJz9_axxR.png)
 ### 二維陣列相加
 ![二維陣列](https://hackmd.io/_uploads/S1-SO6xgA.png)
 ```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); }
 ```
 ### 矩陣相乘
 ![image](https://hackmd.io/_uploads/BkEaYTlgA.png)
 ## 陣列常用的屬性及方法
 [參考網址](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)

