C#數組初始化簡析

來源:互聯網
上載者:User
總是有各種驚喜,震驚!C#數組就是其中之一,我把它作為自己部落格園的處女作。
C#數組與其它C系列語言有著很多的不同,以前接觸的時候理解出現很大的偏差。尤其是對多維陣列的認識。多維陣列與C語言相比是一個新概念。而最開始的
時候我把它當成交錯數組的特殊類型。

首先重二維數組與簡單的交錯數組的初始化與訪問開始

int[,] nums={ {1,2,3}, {1,2,0} }; for (int i = nums.GetLowerBound(0); i <= nums.GetUpperBound(0); i++) { for (int j = nums.GetLowerBound(1); j <= nums.GetUpperBound(1); j++) { Console.WriteLine(nums[i,j]); Console.WriteLine(nums.GetValue(i,j)); } } foreach (var num in nums) { Console.WriteLine(num); } //對任意維度數組,都可以這樣快速存取,只是foreach不能修改變數。

而交錯數組也能實現差不多的內容

int[][] nums2 ={ new int[]{1,2,3}, new int[]{1,2,0} }; for (int i = nums2.GetLowerBound(0); i <= nums2.GetUpperBound(0); i++) { for (int j = nums2[i].GetLowerBound(0); j <= nums2[i].GetUpperBound(0); j++) { Console.WriteLine(nums2[i][j]); } } foreach (var ia in nums2) { foreach (var i in ia) { Console.WriteLine(i); } }

多維陣列儲存的資料可以用交錯數組替代。交錯數組是一個有高維度特殊數組。而交錯數組是數組的數組。而且數組有一個很重要的性質,
數組裡面儲蓄的必須是相同的類型!這對理解各種複雜數組是很重要的。
複雜的交錯數組

bool[][][] cells31 = new bool[2][][] { new bool[2][] { new bool[] {false}, new bool[] {true} }, new bool[3][] { new bool[] {false}, new bool[] {true}, new bool[] {true} } };

我們必須這樣初始化 有一大堆new 因為交錯數組是數組的數組,所以我們以前一直嵌套。但是需要很多的數群組類型,也可以建立無數的數群組類型。

Console.WriteLine("交錯數群組類型"); Console.WriteLine(cells31[0].GetType()); Console.WriteLine(cells31[0][0].GetType()); Console.WriteLine(cells31[0][0][0].GetType()); //交錯數群組類型 //System.Boolean[][] //System.Boolean[] //System.Boolean //這是交錯數組裡面的類型。 // bool[2][] 與boo[3][] 是相同的類型,所以我們建立儲存結構不一致的數組

接下來是最複雜的類型。將交錯數組與多維陣列混合起來。如果能初始化下面的數組那麼應該就理解的比較透徹了吧!
bool [][,,][][,,][]Foo;
我選擇一個簡單點作為樣本 bool [][,][]Foo;

bool[][,][] Foo = new bool[1][,][] { new bool[2,2][] { { new bool[2] {false, true}, new bool[2] {false, true} }, { new bool[2] {false, true}, new bool[2] {false, true} } } }; Console.WriteLine("混合數群組類型"); Console.WriteLine(Foo.GetType()); Console.WriteLine(Foo[0].GetType()); Console.WriteLine(Foo[0][0,0].GetType()); Console.WriteLine(Foo[0][0, 0][0].GetType()); //結果 混合數群組類型 //system.boolean[][,][] //system.boolean[][,] //system.boolean[] //system.boolean
//定義交錯數組:一維數組存放(二維int數組存放(一維int數組存放(四維int數組))) //標準的C#定義描述 array of( multi-array of( array of (nulti-array))) int[][,][][, , ,] arr = new int[10][,][][,,,]; //初始化 二維int數組存放(一維int數組存放(四維int數組)) arr[4] = new int[1, 2][][,,,]; //初始化 一維int數組存放(四維int數組) arr[4][0, 1] = new int[3][, , ,]; //初始化 四維int數組 arr[4][0, 1][2] = new int[1, 2, 3, 4]; Console.WriteLine(arr.GetType()); Console.WriteLine(arr[4].GetType()); Console.WriteLine(arr[4][0, 1].GetType()); Console.WriteLine(arr[4][0, 1][2].GetType()); //System.Int32[,,,][][,][] //System.Int32[,,,][][,] //System.Int32[,,,][] //System.Int32[,,,] //C#編譯器產生的名字與我們聲明的是倒著的。理解起來應該也沒差異吧

現在應該比較清晰了吧。我也不知道到底是不是每個程式員都理解這些,不過我是花了不少時間才明白的。
最後再考慮一下對數組方法的影響。尤其是 Clear();

Console.WriteLine(Foo[0][0,0][0]); //輸出為Flase Array.Clear(Foo,0,1); Console.WriteLine(Foo[0][0, 0][0]); //這裡會引發Null 參考異常。因為 bool[][,]的類型的值已經變為null。


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.