C#規範解讀之8.2.3數群組類型

來源:互聯網
上載者:User

數組可以是一維或者多維的。"矩形"數組和"不整齊"數組C#都支援。

一維數組是最常見的類型了。例子: 1 using System;
 2 class Test
 3 {
 4 static void Main() {
 5 int[] arr = new int[5];
 6 for (int i = 0; i < arr.Length; i++)
 7 arr[i] = i * i;
 8 for (int i = 0; i < arr.Length; i++)
 9 Console.WriteLine("arr[{0}] = {1}", i, arr[i]);
10 }
11 }

建立了一個int型的一維數組,初始化數組的元素後,列印出每個元素的值。輸出是:
arr[0] = 0
arr[1] = 1
arr[2] = 4
arr[3] = 9
arr[4] = 16
例子中的類型int[]是一個數群組類型。數群組類型用一個非數群組類型後跟一個或多個秩符號(譯註:即方括弧"[]")表示。例子: 1 class Test
 2 {
 3 static void Main() {
 4 int[] a1; // single-dimensional array of int
 5 int[,] a2; // 2-dimensional array of int
 6 int[,,] a3; // 3-dimensional array of int
 7 int[][] j2; // "jagged" array: array of (array of int)
 8 int[][][] j3; // array of (array of (array of int))
 9 }
10 }

展示了各種int型數組的局部變數的聲明。數群組類型是參考型別,因此陣列變數的聲明只是為指向數組的引用開闢記憶體空間。數組執行個體實際上是由數組的建構函式或者數組構造運算式來建立的。
例子: 1 class Test
 2 {
 3 static void Main() {
 4 int[] a1 = new int[] {1, 2, 3};
 5 int[,] a2 = new int[,] {{1, 2, 3}, {4, 5, 6}};
 6 int[,,] a3 = new int[10, 20, 30];
 7 int[][] j2 = new int[3][];
 8 j2[0] = new int[] {1, 2, 3};
 9 j2[1] = new int[] {1, 2, 3, 4, 5, 6};
10 j2[2] = new int[] {1, 2, 3, 4, 5, 6, 7, 8, 9};
11 }
12 }

展示了各種數組構造的運算式。變數a1,a2,a3是矩形數組,j2是不整齊數組。"矩形數組"、"不整齊數組"的說法是基於數組的形狀來說的。矩形數組總是有一個矩陣的形狀。
給定數組各維的長度,它的矩陣樣子就很明顯了。比如,a3各個維數的大小分別是10,20和30,對應的,容易指出:這個數組包含10*20*30個元素。
相反,變數j2是一個不整齊數組,或者說是"數組的數組"。特別的,j2表示一個int類型數組的數組,或者說j2是一個一維的、數組元素是int[]類型的數組。它裡面的每一個int[]類型的元素都可以分別執行個體化,這就形成了j2的不整齊的形狀。
例子中裡面的每個int[]都有不同的長度。特別的,j2[0]的長度是3,j2[1]是6,j2[2]是9。
(注意:在C++中,定義數組int x[3][5][7]表示一個3維的矩形數組,在C#中,int[][][]定義了一個不整齊數組)
元素的類型和數組的形狀(包括不整齊數組和矩形數組),以及維數,是數群組類型的一部分。換句話說,數組的大小--由每一維的大小來共同確定,並不是數群組類型的一部分。
這種區分在語言的文法上是很清楚的,因為數組每一維的大小是在數組構造運算式中指出的,而不是在數群組類型中指出的。比如
int[,,] a3 = new int[10, 20, 30];
包含一個數群組類型int[,,]運算式,以及數組構造運算式 new int[10, 20, 30].
對於局部變數和欄位的聲明,可以用一種縮寫的方式,如下所示:
int[] a1 = new int[] {1, 2, 3};
可以縮寫成
int[] a1 = {1, 2, 3};
在語義上是不變的。
內容相關的語境確定了當前正在初始化的數組的類型,這個類型的資訊是數組初始化器如{1,2,3}需要的。
例子:1 class Test
2 {
3 static void Main() {
4 short[] a = {1, 2, 3};
5 int[] b = {1, 2, 3};
6 long[] c = {1, 2, 3};
7 }
8 }

展示了同一個數組初始化器可以用在各種不同的數群組類型上。因為需要上下文來確定數組初始化器的類型,除非明確地指出數組的類型,否則不能使用數組的初始化器。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.