在語法上, 陣列使用中括號[ ] 來代表,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 } }
「不規則陣列」是由多個一維陣列組合而成, 每個一維陣列的長度可以不同, 標示是由分開的中括號集合而成。在初始化的時候需要先指定第一層陣列的長度。
陣列(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 建構資訊系統實戰經典教本