C 銳利體驗 第十一講 陣列

2021-03-31 08:56:28 字數 3564 閱讀 3688

第十一講 陣列

陣列

???????陣列是程式設計常用的一種資料結構。和c/c++一樣,c#中的陣列索引從0開始,且其元素型別必須為相同,當然由於多型等帶來的隱式轉型則另當別論。c#中的陣列可以分為一維陣列,多維陣列以及參差陣列(ragged array),它們各自的宣告,初始化,以及元素索引都有不同語法規定。c#同c++中的陣列的乙個顯著的不同是它由.***通用語言執行時(clr)保證其型別安全,可以在執行時動態建立和擴充容量。

???????一維陣列宣告和初始化有特定的語法,我們通常將他們放在一起,看下面的**與注釋:

//宣告的同時初始化

int myintarr1=new int ;//宣告並初始化1*3陣列

int myintarr2=int;//簡化形式的初始化

//宣告與初始化分開

int myintarr3;

myintarr3=new int;//不可以用簡化形式的初始化

//初始化中可以指定陣列的容量

int myintarr4=new int[3];

//不可以int[3] myintarr4=new int[3]

???????注意這裡的宣告部分中括號緊跟在陣列元素型別(如int)後面,然後才是變數名。c#不支援傳統c++中那樣的int a=宣告方式。等號右面是初始化部分,我們可以看到c#支援兩種初始化表達形式,其中後者是前者的簡化。但在宣告與初始化分開的情況下,我們不能再採用簡化形式的初始化。c#陣列的初始化部分可以在中括號中指定陣列的容量(其中必須為整數常量或常數,當然必須和後面初始化的陣列元素個數一致匹配),陣列宣告部分不可以包含陣列的容量。

???????c#支援多維陣列,其初始化和c++一樣都採用巢狀的大括號來表達,但它的宣告較c++有所不同,看下面的**與注釋:

//宣告的同時初始化

int[,] mymularr1=new int[,],};//宣告並初始化2*3陣列

int[,] mymularr2=,};//簡化形式的初始化

//宣告與初始化分開

int[,] mymularr3;

mymularr3=new int[,],};

//初始化中可以指定陣列的容量

int[,] mymularr4=new int[2,3],};

//不可以int[2,3] mymularr5=new int[2,3],};

???????c#採用中括號中用逗號「,」分割的方法來宣告多維陣列,多個中括號(如int a)的表達方式在c#中用來表示下面的參差陣列。多維陣列的宣告和初始化與一維陣列有相似的規定,我們可以從上面的例子中看出來。

???????參差陣列又稱陣列的陣列(array of array),它表面上類似於我們上面講到的多維陣列,但它本質上仍是乙個一維陣列,只不過它的元素又是乙個陣列(可以是一維陣列,多維陣列,或者參差陣列)。參差陣列乙個顯著的特性是作為它的元素的陣列的階數可以不同,非常形象地表現為「參差不齊」狀。由於本質仍是乙個一維陣列,參差陣列的宣告與初始化和一維陣列的規定一樣,只是由於我們在「感官」上老把它假定為乙個多維陣列而導致我們在這裡很容易犯錯,看下面的**與注釋:

//宣告的同時初始化

int myragarr1=new int,new int};//宣告並初始化二維陣列,其元素為三維陣列

int myragarr2=,new int};//簡化形式的初始化

//不可以用多維陣列的初始化語句:int myragarr2=,};

//宣告與初始化分開

int myragarr3;

myragarr3=new int[2];//初始化一維陣列,

//不可以這樣:myragarr3=new int[2][3];

myragarr3[0]=new int;//初始化陣列元素

myragarr3[1]=new int;//初始化陣列元素

//初始化中可以指定陣列的容量

int myragarr4=new int[2],new int};

//不可以int[2] myragarr=new int[2],new int};

//也不可以int myragarr4=new int[2][3],new int};

//乙個典型的「參差」陣列

int myragarr5=new int[3];

myragarr5[0]=new int;

myragarr5[1]=new int;

myragarr5[2]=new int;

???????c#採用多個中括號並列的方式來表達參差陣列(陣列的陣列)。上面的**和注釋詳細的展示了參差陣列在宣告和初始化時的用法。大多數行為和我們前面從一維陣列中得來的經驗相同,但只有一點需要指出:為什麼我們在指定陣列的容量的時候只能指定其第乙個中括號中的常量或常數,而不可以指定其後面中括號中的容量?這可以從參差陣列的本質一維陣列上找到答案。我們說在對參差陣列初始化的時候,我們實際上是在初始化一維陣列中的各個元素。根據一維陣列的規定,我們只能指定這些元素的個數,即一維陣列的容量,也就是參差陣列第乙個中括號中的常量或常數。

???????c#中的陣列本質上是一種託管的system.array型別,當然它也擁有system.array所有的介面操作。值得指出的是system.array是乙個抽象型別,我們不可以直接宣告system.array而得到陣列型別——實際上,system.array根本就不應該被認為是陣列型別,它僅僅是通過系統服務為我們提供介面操作。system.array的很多的屬性和方法對我們運算元組非常有用,本文不再一一列出,下面僅給乙個完整的示範性例子做拋磚引玉之意:

using system;

class test

; ????????foreach(int i in myintarr)

????????????console.write(i);

????????console.writeline("/nthe length:"+myintarr.length+"/n");

????????

????????//多維陣列

????????int[,] mymularr=new int[,],};

????????foreach(int i in mymularr)

????????????console.write(i);

????????console.writeline();

????????

????????for(int i=0;i<2;i++)

????????

????????console.writeline("/nthe length:"+mymularr.length+"/n");

????

????????//參差陣列

????????int myragarr=new int[3];

????????myragarr[0]=new int;

????????myragarr[1]=new int;

????????myragarr[2]=new int;

????????for(int i=0;i

????????

????????console.writeline("/nthe length:"+myragarr.length);

????}

}

第十一講 過載

過載單目運算子 單目運算子只有乙個運算元 如 a,b,i,j 等 因此過載函式只有乙個引數,如果過載函式為成員函式,還可以省約此引數。例 將 過載成友元函式。單目運算子一般過載為成員函式 include class complex void show complex operator complex...

第十一講 資料清洗

資料採集完,要進行資料清洗工作,整個資料分析過程中,資料清洗工作幾乎要佔到80 的時間。資料清洗規則總結為四個關鍵點 完全合一 1 完整性 單條資料是否存在空值,統計的字段是否完善。2 全面性 觀察某一列的全部數值,比如平均值 最大值 最小值,根據常識判斷是否有問題。如 資料定義 單位標識 數值本身...

第十一講 if分支語句

1 if單分支 語法結構 if 條件 code.code.注 1,條件是表示式,不需要用括號括起來 2,條件的結束要有冒號 3,語句塊沒有花括號,而是由統一的縮進來實現 eg1 count 89 if count 80 條件是表示式,不需要用括號括起來 print larger then 80 eg...