解析C#數組

數組是一種數據結構,他使用同一類型的多個對象,其元素在內存中連續存放。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主要通過IEnumerableIEnumerator接口實現。

使用引用類型:

不但能夠聲明預定義類型的數組,還可以聲明定製類型的數組。

注意:如果數組中的元素是引用類型,就必須爲每個數組元素分配內存(分配內存即對象實例化)。若使用了數組中未分配內存的元素,則會拋出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());}
}

發佈了38 篇原創文章 · 獲贊 9 · 訪問量 22萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章