C#銳利體驗 第十一講 數組

來源:互聯網
上載者:User

第十一講 數組

數組
???????數組是程式設計常用的一種資料結構。和C/C++一樣,C#中的數組索引從0開始,且其元素類型必須為相同,當然由於多態等帶來的隱式轉型則另當別論。C#中的數組可以分為一維數組,多維陣列以及參差數組(Ragged Array),它們各自的聲明,初始化,以及元素索引都有不同文法規定。C#同C++中的數組的一個顯著的不同是它由.NET通用語言運行時(CLR)保證其型別安全,可以在運行時動態建立和擴充容量。
???????一維數組聲明和初始化有特定的文法,我們通常將他們放在一起,看下面的代碼與注釋:
//聲明的同時初始化
int[] MyIntArr1=new int[] {1,2,3};//聲明並初始化1*3數組
int[] MyIntArr2=int{1,2,3};//簡化形式的初始化

//聲明與初始化分開
int[] MyIntArr3;
MyIntArr3=new int[]{1,2,3};//不可以用簡化形式的初始化

//初始化中可以指定數組的容量
int[] MyIntArr4=new int[3]{1,2,3};
//不可以int[3] MyIntArr4=new int[3]{1,2,3}
???????注意這裡的聲明部分中括弧[]緊跟在數組元素類型(如int)後面,然後才是變數名。C#不支援傳統C++中那樣的int a[]={1,2,3,4,5}聲明方式。等號右面是初始化部分,我們可以看到C#支援兩種初始化表達形式,其中後者是前者的簡化。但在聲明與初始化分開的情況下,我們不能再採用簡化形式的初始化。C#數組的初始化部分可以在中括弧[]中指定數組的容量(其中必須為整數常量或常數,當然必須和後面初始化的數組元素個數一致匹配),數組聲明部分不可以包含數組的容量。
???????C#支援多維陣列,其初始化和C++一樣都採用嵌套的大括弧來表達,但它的聲明較C++有所不同,看下面的代碼與注釋:
//聲明的同時初始化
int[,] MyMulArr1=new int[,]{{1,2,3},{2,4,6}};//聲明並初始化2*3數組
int[,] MyMulArr2={{1,2,3},{2,4,6}};//簡化形式的初始化

//聲明與初始化分開
int[,] MyMulArr3;
MyMulArr3=new int[,]{{1,2,3},{2,4,6}};

//初始化中可以指定數組的容量
int[,] MyMulArr4=new int[2,3]{{1,2,3},{2,4,6}};
//不可以int[2,3] MyMulArr5=new int[2,3]{{1,2,3},{2,4,6}};
???????C#採用中括弧中用逗號“,”分割的方法來聲明多維陣列,多個中括弧(如int[][] a)的表達方式在C#中用來表示下面的參差數組。多維陣列的聲明和初始化與一維數組有相似的規定,我們可以從上面的例子中看出來。
???????參差數組又稱數組的數組(Array of Array),它表面上類似於我們上面講到的多維陣列,但它本質上仍是一個一維數組,只不過它的元素又是一個數組(可以是一維數組,多維陣列,或者參差數組)。參差數組一個顯著的特性是作為它的元素的數組的階數可以不同,非常形象地表現為“參差不齊”狀。由於本質仍是一個一維數組,參差數組的聲明與初始化和一維數組的規定一樣,只是由於我們在“感官”上老把它假定為一個多維陣列而導致我們在這裡很容易犯錯,看下面的代碼與注釋:
//聲明的同時初始化
int[][] MyRagArr1=new int[][]{new int[]{1,2,3},new int[]{2,4,6}};//聲明並初始化二維數組,其元素為三維數組
int[][] MyRagArr2={new int[]{1,2,3},new int[]{2,4,6}};//簡化形式的初始化
//不可以用多維陣列的初始化語句:int[][] MyRagArr2={{1,2,3},{2,4,6}};

//聲明與初始化分開
int[][] MyRagArr3;
MyRagArr3=new int[2][];//初始化一維數組,
//不可以這樣:MyRagArr3=new int[2][3];
MyRagArr3[0]=new int[]{1,2,3};//初始化數組元素
MyRagArr3[1]=new int[]{2,4,6};//初始化數組元素

//初始化中可以指定數組的容量
int[][] MyRagArr4=new int[2][]{new int[]{1,2,3},new int[]{2,4,6}};
//不可以int[2][] MyRagArr=new int[2][]{new int[]{1,2,3},new int[]{2,4,6}};
//也不可以int[][] MyRagArr4=new int[2][3]{new int[]{1,2,3},new int[]{2,4,6}};

//一個典型的“參差”數組
int[][] MyRagArr5=new int[3][];
MyRagArr5[0]=new int[]{1,2,3,4,5};
MyRagArr5[1]=new int[]{1,2,3};
MyRagArr5[2]=new int[]{1,2,3,4,5,6,7,8};
???????C#採用多個中括弧並列的方式來表達參差數組(數組的數組)。上面的代碼和注釋詳細的展示了參差數組在聲明和初始化時的用法。大多數行為和我們前面從一維數組中得來的經驗相同,但只有一點需要指出:為什麼我們在指定數組的容量的時候只能指定其第一個中括弧中的常量或常數,而不可以指定其後面中括弧中的容量?這可以從參差數組的本質一維數組上找到答案。我們說在對參差數組初始化的時候,我們實際上是在初始化一維數組中的各個元素。根據一維數組的規定,我們只能指定這些元素的個數,即一維數組的容量,也就是參差數組第一個中括弧中的常量或常數。
???????C#中的數組本質上是一種託管的System.Array類型,當然它也擁有System.Array所有的介面操作。值得指出的是System.Array是一個抽象類別型,我們不可以直接聲明System.Array而得到數群組類型——實際上,System.Array根本就不應該被認為是數群組類型,它僅僅是通過系統服務為我們提供介面操作。System.Array的很多的屬性和方法對我們運算元組非常有用,本文不再一一列出,下面僅給一個完整的示範性例子做拋磚引玉之意:
using System;
class Test
{
????public static void Main()
????{
????????//一維數組
????????int[] MyIntArr=new int[] {1,2,3,4,5};
????????foreach(int i in MyIntArr)
????????????Console.Write(i);
????????Console.WriteLine("/nThe Length:"+MyIntArr.Length+"/n");
????????
????????//多維陣列
????????int[,] MyMulArr=new int[,]{{1,2,3},{2,4,6}};
????????foreach(int i in MyMulArr)
????????????Console.Write(i);

????????Console.WriteLine();
????????
????????for(int i=0;i????????{
????????????Console.WriteLine();
????????????for(int j=0;j????????????????Console.Write(MyMulArr[i,j]);
????????}
????????Console.WriteLine("/nThe Length:"+MyMulArr.Length+"/n");
????

????????//參差數組
????????int[][] MyRagArr=new int[3][];
????????MyRagArr[0]=new int[]{1,2,3,4,5};
????????MyRagArr[1]=new int[]{1,2,3};
????????MyRagArr[2]=new int[]{1,2,3,4,5,6,7,8};
????????for(int i=0;i????????{
????????????Console.WriteLine();
????????????for(int j=0;j????????????????Console.Write(MyRagArr[i][j]);
????????}
????????Console.WriteLine("/nThe Length:"+MyRagArr.Length);
????}
}

聯繫我們

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