Home [C# 筆記] 陣列(Array)的宣告
Post
Cancel

[C# 筆記] 陣列(Array)的宣告

在語法上, 陣列使用中括號[ ] 來代表,C#提供了三種陣列 (1)一維陣列 (2)多維陣列 (3)不規則陣列

一維陣列

1
2
3
int[] array1 = new int[5]; 
int[] array2 = new int[] { 1, 3, 5, 7, 9 }; //用第三種就好
int[] array3 =  { 1, 3, 5, 7, 9 }; //快速宣告給值

顧名思義, 「一維陣列」就是一個維度的連續數據集合, 初始化的時候可以使用兩種方式,
第一種是指定大小(將長度寫在中括號裏頭),
第二種是直接指定值

多維陣列

1
2
3
int[,] array2D1 = new int[2, 3]; //二維
int[,] array2D2 = { { 1, 2, 3 }, { 4, 5, 6 } };
int[,,] array3D = new int[2, 3, 4]; //三維

「多維陣列」是用「逗點(,)」做分割, 初始化的方法跟一維陣列一樣有兩種方式。 需要注意的是多維陣列的長度必須一致, 如果有長度不一致的需要, 請使用不規則陣列(Jagged Array)

不規則陣列(Jagged Array)

1
2
int[][] jaggedArray = new int[6][];
int[][] jaggedArray = { new int[]{ 1, 2, 3 }, new int[]{ 1, 2 } }

「不規則陣列」是由多個一維陣列組合而成, 每個一維陣列的長度可以不同, 標示是由分開的中括號集合而成。在初始化的時候需要先指定第一層陣列的長度。

MSDN - 陣列


陣列(Array)是資料結構的一種,它存放在連續記憶體中的包含多個資料型別相同的變數之集合。 並且使用數字稱為「索引(Index)」或「註標(Subscript)」來加以區分陣列中的元素。

在C#中陣列是以「0」為起始索引,這表示包含N個元素的陣列當在建立索引時,會從「0」開始,然後到「N-1」為止。

null""不同,
null沒有佔存空間,沒有值,
""有佔存空間,存了一個「空」。

特性

  • 所有陣列繼承自System命名空間中Array類別。
  • 陣列可以宣告成「一維陣列」、「多維陣列」或「不規則陣列」。
  • 陣列元素的資料型別可以為任意型別,當然也包括陣列型別,因此陣列元素亦可包含陣列。
  • 陣列元素是屬於「實值型別」中的數值資料型態時,其預設值為「0」,若是「參考型別」則預設值為「null」。

一維陣列(One-dimension Array)宣告方式

不給初始值

語法

1
2
//一維陣列,宣告並初始化給定個數(宣告的同時,就確定了類型、長度)
資料類型[] 陣列名稱 = new 資料型別[陣列元素個數]; 

範例1:(有new初始化)

宣告一個名為score的整數陣列,用來存放50名學生的成績。
如下:

1
int[] score = new int[50];

這時候內存就開闢了連續50塊空間,每一塊空間稱之為這個陣列的元素。

陣列的長度一旦固定了,就沒辦法改變。
(若要改陣列的長度,可用 Array.Resize()方法來變更其陣列大小 )

範例2:(沒有new初始化)

宣告一個名為score的整數陣列,但沒有初始化。
如下:

1
int[] score;

當宣告陣列變數若沒有初始化給定陣列元素內容值時,一定要使用new給定內容值。
如下:

1
2
int[] nums;
nums = new int[] { 1, 2, 3};

給定初始值

宣告的同時,就確定了初始值。

使用「快速」宣告方式給定陣列初始值:

1
2
int[] nums = { 1, 2, 3, 4, 5, 6 }; //宣告的同時,就確定了初始值
int[] nums = [ 1, 2, 3, 4, 5, 6 ]; //也可以用方括弧

有四種,記得這兩種就好了

  • int[] nums1 = new int[10]; //宣告的同時,就確定了類型、長度
  • int[] nums2 = { 1, 2, 3, 4, 5, 6 }; //宣告的同時,就確定了初始值(也可以用方括弧)

  • int[] nums3 = new int[3] { 1, 2, 3 }; //不推,寫了幾個長度,就要給幾個值
  • int[] nums4 = new int[] { 1, 2, 3 }; //不推,意思跟第二種一樣, 還要多寫new int[]

語法

1
2
//一維陣列,宣告並初始化給定個數(宣告的同時,就確定了類型、長度、初始值)
資料類型[] 陣列名稱 = new 資料型別[陣列元素個數] { , , , , }; 
1
2
3
4
5
6
7
8
//使用「快速」宣告方式給定陣列初始值
int[] nums1 = { 1, 2, 3 };

//不推,寫了幾個長度,就要給幾個值
int[] nums2 = new int[3] { 1, 2, 3 }; 

//不推,意思跟第一種一樣, 還要多寫new int[]
int[] nums3 = new int[] { 1, 2, 3 }; 

範例

宣告一個名為lottery的整數陣列,裡面存放樂透開獎號碼與特別號

1
int[] lottery = new int[7] { 03, 17, 20, 23, 24, 33, 7};

改成「快速」宣告方式 給定陣列初始值:

1
int[] lottery = { 03, 17, 20, 23, 24, 33, 7};

注意,當宣告陣列變數若沒有初始化給定陣列元素內容值時,一定要使用new給定內容值。
如下:

1
2
3
int[] lottery;
lottery = new int[] { 03, 17, 20, 23, 24, 33, 7};
//lottery = { 03, 17, 20, 23, 24, 33, 7}; //此寫法會產生錯誤:「無效的運算式','」

多維陣列(Multi-dimension Array)宣告方式

「多維陣列」就是維度「大於1以上」的陣列。

不給初始值

語法

1
2
3
4
5
6
7
//二維陣列,宣告並初始化給定個數(宣告的同時,就確定了類型、長度)
資料類型[,] 陣列名稱 = new 資料型別[元素個數,元素個數]; 
int[,] arr2D = new int[2, 3];

//三維陣列
資料類型[,,] 陣列名稱 = new 資料型別[元素個數,元素個數,元素個數]; 
int[,,] arr3D = new int[2, 4, 8];

範例

宣告一個名為 score 的整數陣列,裡面存放上下二學期的50個學生成績。

1
int[,] score = int[2, 50]; //2學期,50個學生

給初始值

範例1

宣告一個名為lottery的整數陣列,裡面存放二期的樂透開獎號碼。

1
2
3
4
5
6
// 不推,請用「快速」宣告給值
int[,] lottery = new int[2, 6]  //2期,6個樂透號碼
{
    { 03, 17, 20, 23, 24, 33},
    { 04, 37, 10, 28, 14, 35}
};

其陣列「索引值」與陣列「元素內容值」如下:

1
2
lottery[0,0] = 03  lottery[0,1] = 17  lottery[0,2] = 20  lottery[0,3] = 23  lottery[0,4] = 24  lottery[0,5] = 33
lottery[1,0] = 04  lottery[1,1] = 37  lottery[1,2] = 10  lottery[1,3] = 28  lottery[1,4] = 14  lottery[1,5] = 35

範例2:快速宣告給值

1
2
3
4
int[,] lottery = {
    { 03, 17, 20, 23, 24, 33},
    { 04, 37, 10, 28, 14, 35}
};

或是

1
2
3
4
5
int[,] lottery;
lottery = new int[2,6] {
    { 03, 17, 20, 23, 24, 33},
    { 04, 37, 10, 28, 14, 35}
};

不規則陣列(Jagged Array)宣告方式

「不規則陣列」就是「陣列中亦可包含陣列」。

也就是說,不規則陣列中的元素也是陣列,因此其元素為「參考型別」,並會初始化為null

在不規則陣列中的每一列長度可以不同。因為不規則陣列每一列長度會根據新實體化陣列的長度來決定的。

語法

1
資料型別[][] 陣列名稱 = new 資料型別[陣列大小][];

範例

指導教授「收學生」的條件資訊。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
static void Main(string[] args)
{
    //宣告並初始化不規則陣列
    string[][] advisor = new string[3][];

    //對每一列進行new的實體化動作
    advisor[0] = new string[] { "王小明", "Coding能力", "閱讀Paper" };
    advisor[1] = new string[] { "大仁哥", "離散數學", "搞笑", "有創意" };
    advisor[2] = new string[] { "小菜菜", "不當米蟲即可"};

    /* 可以簡寫成:
    advisor[0] = ["王小明", "Coding能力", "閱讀Paper"];
    advisor[1] = ["大仁哥", "離散數學", "搞笑", "有創意"];
    advisor[2] = ["小菜菜", "不當米蟲即可"];
    */

    //透過雙迴圈,將元素內容取出
    string msg = string.Empty;
    for (int i = 0; i < advisor.Length; i++)
    {
        for (int j = 0; j < advisor[i].Length; j++)
        {
            msg += advisor[i][j] + "\t";
        }
        msg += Environment.NewLine;
    }

    //顯示所有內容
    Console.WriteLine($"指導教授收學生條件:{Environment.NewLine}{msg}");
}

MSDN - 陣列
[C# 筆記] array 陣列 by R
[C# 筆記] 陣列(Array)的宣告 by R
Book: Visual C# 2005 建構資訊系統實戰經典教本

This post is licensed under CC BY 4.0 by the author.

[C# 筆記] break、contiune、goto (終止、繼續、跳躍)

[C# 筆記] 陣列常用的屬性(Attribute)