C#陣列教程

大可山發表於2009-02-24

C#陣列教程

第二篇:C#陣列教程之2

第三篇:C#陣列教程之3

I、基礎部分

一、陣列概述

·陣列是一組具有相同型別和名稱的變數的集合。

·這些變數稱為陣列的元素,每個陣列元素都有一個編號,這個編號叫做下標,我們可以通過下標來區別這些元素。

·陣列元素的個數被稱為陣列的長度。

·一般情況下,陣列的元素型別必須相同。但在PHP等中有所改變。

·C#中,陣列是System.Array類的一個例項。

·優缺點:優點:高效訪問給定下標的元素,程式設計簡單、直觀。缺點:例項化時必須指定陣列的大小,之後不能增刪元素(也就是非動態)。

C#中的陣列:

· C# 陣列中每個元素的型別必須相同;

· C# 陣列的下標是從 0 開始;

· C# 中沒有動態陣列,但可以用ArrayList實現類似動態陣列的功能;

· C# 中支援多維陣列及交錯陣列(Jagged Array)。

C# 支援一維陣列、多維陣列(矩形陣列)和鋸齒型陣列(或叫交錯陣列,陣列的陣列)。

二、宣告、例項化和初始化陣列

1.宣告陣列

下面的示例展示如何宣告不同型別的陣列:

一維陣列:

int[] numbers;

多維陣列:

string[,] names;

交錯陣列(陣列中的陣列):

byte[][] scores;

2、例項化陣列

宣告陣列(如上所示)並不實際建立它們。在 C# 中,陣列是物件(事實上,C#和.NET Framework中的所有東西都是物件),必須進行例項化。下面的示例展示如何建立陣列:

一維陣列:

int[] numbers = new int[5];

常見問題:

int[3] arr; //錯誤,不能這樣指定陣列大小

應該是:

int[] arr = new int[3]; //正確,宣告一個長度為 3 的 int 型別陣列,[]中的數字表示長度不是下標的上界。

多維陣列:

string[,] names = new string[5,4];

交錯陣列(鋸齒陣列或“陣列的陣列”):

交錯陣列是指陣列的元素又是一個陣列,這和多維陣列是不一樣的,也就是說,交錯陣列就是“陣列的陣列”。

byte[][] scores = new byte[5][];

for (int x = 0; x 

{

   scores[x] = new byte[4];

}

還可以有更大的陣列。例如,可以有三維的矩形陣列:

int[,,] buttons = new int[4,5,3];

甚至可以將矩形陣列和交錯陣列混合使用。例如,下面的程式碼宣告瞭型別為 int 的二維陣列的三維陣列的一維陣列。

int[][,,][,] numbers;

宣告陣列

int[][] arr = new int[3][];

arr[0] = new int[7];

arr[1] = new int[8];

arr[2] = new int[9];

以上陣列中 arr 是一個長度為 3 的陣列。

arr 的第一個元素是一個長度為 7 的陣列,第二個元素是一個長度為 8 的陣列,第三個元素是一個長度為 9 的陣列。

一定注意: int[][] arr = new int[3][]; 不能寫成 int[] arr = new int[3];

另外,初始化時第二個中括號中也不能有數值。

3、初始化陣列

C# 通過將初始值括在大括號 ({}) 內為在宣告時初始化陣列提供了簡單而直接了當的方法。下面的示例展示初始化不同型別的陣列的各種方法。

如上述的numbers可以用下面方式初始化:

numbers[0] = 1;

numbers[1] = 2;

numbers[2] = 3;

numbers[3] = 4;

numbers[4] = 5;

上述初始化方式很不簡潔,較簡潔的方式是:

numbers = new int[]{1,2,3,4,5};

4.簡潔化的做法

事實上,可以將宣告、例項化和初始化放在一起,變得更加簡潔方便,比如:

一維陣列

宣告陣列並賦初值

int[] numbers = new int[]{1,2,3,4,5,6}; //不定長 

int[] numbers = new int[5] {1, 2, 3, 4, 5};//定長

string[] names = new string[3] {"Matt", "Joanne", "Robert"};

Note: [] 跟在型別名之後表示是個陣列,{} 表示要賦的初值列表,各個初值之間用英文逗號(,)隔開。

可省略陣列的大小,如下所示:

int[] numbers = new int[] {1, 2, 3, 4, 5};

string[] names = new string[] {"Matt", "Joanne", "Robert"};

如果提供了初始值設定項,則還可以省略 new 運算子,如下所示:

int[] numbers = {1, 2, 3, 4, 5};

string[] names = {"Matt", "Joanne", "Robert"};

C# 陣列也支援動態指定

int len = 3;

int[] arr = new int[len];

多維陣列

int[,] numbers = new int[3, 2] { {1, 2}, {3, 4}, {5, 6} };//定長

第一維的長度為 3,第二維的長度為 2。

string[,] siblings = new string[2, 2] { {"Johnson","Ju"}, {"Mary","Albert"} };

可省略陣列的大小,如:

int[,] numbers = new int[,] { {1, 2}, {3, 4}, {5, 6} };

string[,] siblings = new string[,] { {"Johnson","Ju"}, {"Mary","Albert"} };

如提供了初始值設定項,則還可以省略 new 運算子,如:

int[,] numbers = { {1, 2}, {3, 4}, {5, 6} };

賦值為“橫向掃描”賦值,該例相當於:

numbers[0, 0] = 1;

numbers[0, 1] = 2;

numbers[1, 0] = 3;

numbers[1, 1] = 4;

numbers[2, 0] = 5;

numbers[2, 1] = 6;

string[,] siblings = { {"Johnson", "Ju"}, {"Mary", "Albert"} };

交錯的陣列(陣列的陣列)

可以像下例所示那樣初始化交錯的陣列:

int[][] numbers = new int[2][] { new int[] {2,3,4}, new int[] {5,6,7,8,9} };

可省略第一個陣列的大小,如下所示:

int[][] numbers = new int[][] { new int[] {2,3,4}, new int[] {5,6,7,8,9} };

或:

int[][] numbers = { new int[] {2,3,4}, new int[] {5,6,7,8,9} };

請注意,對於交錯陣列的元素沒有初始化語法。

int[][] arr = new int[2][];

numbers[0] = new int[3];

numbers[1] = new int[5];

numbers[0][0] = 2;

如果此時設定:

numbers[0][2] = 6;那麼:

numbers = { new int[] {2,3,6}, new int[] {5,6,7,8,9} };

我們可以把numbers當作一個一維陣列來對待,陣列的陣列又可以當作一維陣列來對待。

交錯陣列也可以是“陣列的陣列的陣列”,以此類推:

int[][][] arr = new int[3][][];

arr[0] = new int[7][];

arr[0][0] = new int[3];

//...

注意   如果在宣告時沒有初始化陣列,則陣列成員將自動初始化為該陣列型別的預設初始值。另外,如果將陣列宣告為某型別的欄位,則當例項化該型別時它將被設定為預設值 null。

三、陣列的賦值取值

1、訪問陣列成員

訪問陣列成員可以直接進行,類似於在 C/C++ 中訪問陣列成員。

(1)位置定位法

例如:

int[] arr = new int[3];

arr[0] = 10; //給第一個元素賦值

int m = arr[0]; //取第一個元素的值

下面的程式碼建立一個名為 numbers 的陣列,然後向該陣列的第五個元素賦以 5:

int[] numbers = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0};

numbers[4] = 5; //注意索引是從0開始

下面的程式碼宣告一個多維陣列,並向位於 [1, 1] 的成員賦以 5:

int[,] numbers = { {1, 2}, {3, 4}, {5, 6}, {7, 8}, {9, 10} };

numbers[1, 1] = 5;

下面宣告一個一維交錯陣列,它包含兩個元素。第一個元素是兩個整數的陣列,第二個元素是三個整數的陣列:

int[][] numbers = new int[][] { new int[] {1, 2}, new int[] {3, 4, 5}

};

下面的語句向第一個陣列的第一個元素賦以 58,向第二個陣列的第二個元素賦以 667:

numbers[0][0] = 58;

numbers[1][1] = 667;

(2)迴圈訪問法

對陣列使用 foreach

C# 還提供 foreach 語句。該語句提供一種簡單、明瞭的方法來迴圈訪問陣列的元素。例如,下面的程式碼建立一個名為 numbers 的陣列,並用 foreach 語句迴圈訪問該陣列:

int[] numbers = {4, 5, 6, 1, 2, 3, -2, -1, 0};

foreach (int i in numbers)

{

   System.Console.WriteLine(i);

}

由於有了多維陣列,可以使用相垃圾廣告法來迴圈訪問元素,例如:

int[,] numbers = new int[3, 2] {{111}, {222}, {333}};

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/14601556/viewspace-557617/,如需轉載,請註明出處,否則將追究法律責任。

相關文章