數組是一種數據結構,他使用同一類型的多個對象,其元素在內存中連續存放。C#用特殊的記號如中括號"[]"聲明和使用數組。
數組的聲明:
先定義數組中元素的類型,其後是一個方括號和一個變量名,如:Int[] myArray;
數組的初始化:
數組是引用類型,必須給它分配堆上的內存。對此,應使用new運算符,並且指定數組中元素的類型和元素的數量來初始化數組的變量。如:myArray=new int[4];
在指定了數組的大小後就不能重新設置數組的大小。如果事先不知道數組中應包含多少個元素,得使用集合。
初始化方式:
(1) int[] myArray;myArray=new int[4];
(2) int[] myArray=new int[4];
(3) int[] myArray=new int[4]{4,7,11,2};//數組初始化器只能在聲明數組變量時使用,不能在聲明數組之後使用。
(4) int[] myArray=new int[]{4,7,11,2};//不指定數組的大小。編譯器會自動計算元素個數。
(5) int[] myArray={4,7,11,2};//簡化形式,編譯生成的代碼與前4種相同。
訪問數組元素:
(1) 通過索引器訪問:
Int[] myArray=new int[]{4,7,11,2};
Int v1=myArray[0];//讀取第一個元素
Int v2=myArray[1];//讀取第二個元素
myArray[3]=44;//爲第四個元素賦值
//若使用錯誤的索引值(訪問不存在的元素),則拋出IndexOutOfRangeException異常
(2) 不知道數組元素個數的訪問方式:
For(int i=0;i<myArray.Length;i++)
{Console.WriteLine(myArray[i]);}
(3) 使用foreach語句訪問:
Foreach(int val in myArray)
{console.WriteLine(val);}
//foreach主要通過IEnumerable和IEnumerator接口實現。
使用引用類型:
不但能夠聲明預定義類型的數組,還可以聲明定製類型的數組。
注意:如果數組中的元素是引用類型,就必須爲每個數組元素分配內存(分配內存即對象實例化)。若使用了數組中未分配內存的元素,則會拋出NullReferenceException類型的異常。
聲明方式與預定義類型的聲明方式一樣,初始化方式則必須使用實例化後的自定義類。如:
Person[] myPersons={new Person(“f1”,”l1”),new Person(“f2”,”l2”)};
//Person爲一個用戶自定義類
// Person(“f1”,”l1”)爲person類的構造函數,第一參數表示firstname,第二個參數表示lastname
多維數組:
申明二維數組時需要在括號中加上一個逗號。數組在初始化時應指定每一維的大小(也稱爲階)。訪問數組則採用兩個整數作爲索引器來訪問。如:
Int[,] twodim=new int[3,3];//二維數組聲明,數組聲明之後,不能修改其階數
Twodim[0,0]=1;//二維數組訪問
初始化也可以採用下列方式:
Int[,] twodim={{1,2,3},{4,5,6},{7,8,9}};
使用數組初始化器時,必須初始化數組的每個元素,不能遺漏任何元素。
三維數組聲明和初始化如下:
Int[,,] threedim={{{1,2},{3,4}},{{5,6},{7,8}},{{9,10},{11,12}}};
鋸齒數組:
二維數組的大小是矩形的。而鋸齒數組的大小設置比較靈活,在鋸齒數組中,每一行都可以有不同的大小。
鋸齒數組又稱數組中的數組
在聲明鋸齒數組時,要一次放置開閉括號。在初始化鋸齒數據時,先設置該數組包含的行數。定義各行中元素個數的第二個括號設置爲空,以爲這類數組的每一行包含不同的元素數。之後爲每一行指定行中的元素個數,如:
Int[][] jagged=new int[3][];//二維數組聲明使用的是int[,],注意區別
Jagged[0]=new int[2]{1,2};
Jagged[1]=new int[6]{3,4,5,6,7,8};
Jagged[2]=new int[3]{9,10,11};
迭代鋸齒數組中所有元素的代碼可以使用嵌套for循環。在外層for循環中,迭代每一行,內層的for循環迭代一行中的每個元素:
For(int row=0;row<jagged.Length;row++)
{
For(int element=0;element<jagged[row].Length;element++)
{Console.WriteLine(jagged[row].[element].toString());}
}