輕松學(xué)C#之?dāng)?shù)組_第1頁(yè)
輕松學(xué)C#之?dāng)?shù)組_第2頁(yè)
輕松學(xué)C#之?dāng)?shù)組_第3頁(yè)
輕松學(xué)C#之?dāng)?shù)組_第4頁(yè)
輕松學(xué)C#之?dāng)?shù)組_第5頁(yè)
已閱讀5頁(yè),還剩43頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第5章 數(shù)組在C#中,數(shù)組是一種常用的工具,它能在一個(gè)集合中存儲(chǔ)多個(gè)對(duì)象。我們?cè)谶@一章將給大家介紹什么是數(shù)組以及如何使用數(shù)組,特別是一維數(shù)組、多維數(shù)組和交錯(cuò)數(shù)組。5.1 初識(shí)數(shù)組在生活中我們見(jiàn)到過(guò)這樣的情景:圖書(shū)館中藏有上億本書(shū),但是要找出我們需要的一本時(shí)并不難。這是因?yàn)閳D書(shū)館的所有書(shū)都已經(jīng)編號(hào)放在相應(yīng)的書(shū)架上了。書(shū)架是分類存儲(chǔ)的,它有如下特點(diǎn):1. 分類存放,易于查找。2. 書(shū)架的格子提供了存儲(chǔ)空間。3. 物品進(jìn)行了分類,每一類都有名字。4. 每本書(shū)都有位置編號(hào)。這種方式可以有效大量地存儲(chǔ)書(shū)籍,同樣的辦法可以用到C#中,存儲(chǔ)一組需要一起處理的數(shù)據(jù)。數(shù)組用來(lái)將相同數(shù)據(jù)類型存儲(chǔ)在存儲(chǔ)單元里,數(shù)組

2、的所有元素必須屬于相同的數(shù)據(jù)類型。一個(gè)圖書(shū)存儲(chǔ)與數(shù)組存儲(chǔ)的對(duì)應(yīng)圖來(lái)了解一下數(shù)組中包含的一些內(nèi)容,如下圖(左)所示。下面看一個(gè)整型數(shù)組的例子,下圖(右)。5.2 基本數(shù)組我們先從最基本的數(shù)組給大家講起,其中包括數(shù)組的聲明、初始化、引用、賦值以及利用foreach對(duì)數(shù)組進(jìn)行遍歷。5.2.1 聲明數(shù)組數(shù)組聲明的格式如下圖所示?!臼纠?-1】以下代碼演示的是數(shù)組的聲明方式。char bookName = “C# Unleashed”;5.2.2 數(shù)組的初始化數(shù)組必須在訪問(wèn)之前初始化。數(shù)組的初始化是通過(guò)賦值實(shí)現(xiàn)的,有兩種方式:第一種是以字面形式指定數(shù)組的完整內(nèi)容,格式如下圖所示。使用字面值指定數(shù)組,元素

3、值必須用逗號(hào)隔開(kāi),并全部放在花括號(hào)中,例如:int myIntArray = 5,9,32,65,2;第二種方式是指定數(shù)組的大小,再使用new關(guān)鍵字初始化所有數(shù)組元素,格式如下圖所示。【示例5-2】以下代碼演示的是數(shù)組的兩種初始化方式的組合。需要提醒大家注意的是,使用這種方式,數(shù)組大小必須與元素個(gè)數(shù)相匹配。示例5-3所示的例子是錯(cuò)誤的?!臼纠?-3】以下代碼演示的是錯(cuò)誤的數(shù)組的初始化方式。5.2.3 數(shù)組引用在C#語(yǔ)言中,對(duì)數(shù)組的引用其實(shí)就是對(duì)數(shù)組元素的逐個(gè)使用,一維數(shù)組的引用形式以及相關(guān)舉例如下圖所示:注意:C#語(yǔ)言規(guī)定不能一次引用整個(gè)數(shù)組,引用時(shí)只能逐個(gè)元素引用。5.2.4 數(shù)組的賦值數(shù)組

4、可以在初始化時(shí)就賦值,也可以先初始化后賦值,需要注意的是賦值時(shí)不能夠批量處理,必須是單個(gè)進(jìn)行。如果定義的數(shù)組是基本數(shù)據(jù)類型,即int型、float型、double型、char型和bool型,在C#中定義數(shù)組后,若沒(méi)有指定初始值,則依據(jù)數(shù)據(jù)類型的不同,會(huì)給數(shù)組元素賦予一個(gè)默認(rèn)值,如下表所示。數(shù)組屬于一種引用類型,因此如果將數(shù)組名b賦給數(shù)組a,那么數(shù)組b在操作數(shù)組元素時(shí),實(shí)質(zhì)上操作的還是數(shù)組a,如下圖所示。5.2.5 遍歷數(shù)組C#提供了foreach語(yǔ)句對(duì)數(shù)組元素進(jìn)行遍歷,該語(yǔ)句提供了一種簡(jiǎn)單、明了的方法來(lái)循環(huán)訪問(wèn)數(shù)組中的元素。1.foreach語(yǔ)句foreach語(yǔ)句屬于循環(huán)語(yǔ)句中的一種,它的基本

5、格式如下圖所示。foreach語(yǔ)句對(duì)數(shù)組或集合(稍后會(huì)講到)中的所有元素進(jìn)行逐個(gè)代入,當(dāng)全部代入完成后,控制傳遞給foreach后的下一個(gè)語(yǔ)句。2.用foreach語(yǔ)句遍歷數(shù)組用foreach語(yǔ)句遍歷數(shù)組即對(duì)數(shù)組中的所有元素進(jìn)行逐個(gè)代入,直到全部完成或者出現(xiàn)跳出語(yǔ)句。需要提醒大家注意的是,使用foreach語(yǔ)句對(duì)數(shù)組進(jìn)行遍歷時(shí),對(duì)于數(shù)組內(nèi)容只能進(jìn)行只讀訪問(wèn),而不能改變?nèi)魏卧氐闹怠?.3 特殊數(shù)組我們前面見(jiàn)到的都是一維數(shù)組,是最常見(jiàn)最基本的。除了一維數(shù)組以外,還有一些較特殊的數(shù)組,如多維數(shù)組、數(shù)組的數(shù)組。我們這一節(jié)將給大家介紹這兩種特殊數(shù)組。5.3.1 多維數(shù)組多維數(shù)組中最常用的是二維數(shù)組,我

6、們先介紹二維數(shù)組,再介紹其他維數(shù)組。1.二維數(shù)組的聲明二維數(shù)組是最常見(jiàn)的多維數(shù)組,它由行和列組成。每行包含相同的列數(shù),因而使數(shù)組稱為矩形形狀。二維數(shù)組的聲明格式如下圖所示。2.二維數(shù)組的初始化二維數(shù)組的初始化與一維的沒(méi)有多大區(qū)別,只是中間多了一個(gè)逗號(hào),兩邊需標(biāo)明數(shù)組的行數(shù)和列數(shù),如下圖所示。還有一種也比較常用的初始化方式,如下圖所示。在二維數(shù)組中,通常把行數(shù)稱做行下標(biāo),列數(shù)稱做列下標(biāo)。二維數(shù)組實(shí)質(zhì)是由多個(gè)一維數(shù)組組成,具體說(shuō)明如下圖所示:183.二維數(shù)組的賦值二維數(shù)組可以在初始化時(shí)隨即進(jìn)行賦值,也可以進(jìn)行單獨(dú)的賦值,下面給大家列舉三種常用的賦值方法。以下代碼演示的是二維數(shù)組的賦值方式。4.二維

7、數(shù)組的引用二維數(shù)組的引用形式如下圖所示。5.利用foreach語(yǔ)句遍歷二維數(shù)組foreach循環(huán)語(yǔ)句也可以訪問(wèn)二維數(shù)組中的所有元素,其方式與訪問(wèn)一維數(shù)組相同。6.三維數(shù)組簡(jiǎn)介雖然C#語(yǔ)言對(duì)于數(shù)組的維度并沒(méi)有上限,但是處理高維數(shù)組是很頭疼的事。一般盡量避免處理四維或高于四維的數(shù)組。在此我們只對(duì)三維數(shù)組做一個(gè)簡(jiǎn)單介紹。同二維數(shù)組聲明格式類似,三維數(shù)組在聲明時(shí)只需要在中括號(hào)中用兩個(gè)逗號(hào)隔開(kāi)即可,如下圖所示。比如聲明了這樣一個(gè)三維數(shù)組int , , calories = new int 3,6,3;為了便于大家理解,右圖給出了三維數(shù)組的詳細(xì)存儲(chǔ)方式。演示的是三維數(shù)組的聲明及賦值方式。5.3.2 交錯(cuò)數(shù)

8、組交錯(cuò)數(shù)組也稱為數(shù)組的數(shù)組,是一種不規(guī)則的二維數(shù)組,因此也被稱為鋸齒形數(shù)組。它與二維數(shù)組(矩形數(shù)組)最大的區(qū)別就在于每一行的長(zhǎng)度并不相同,我們可以把它想象成由不同長(zhǎng)度組成的一維數(shù)組組成的二維數(shù)組,如下圖所示。數(shù)組的每一行的長(zhǎng)度不同,因此稱其為“交錯(cuò)”。這樣做比規(guī)則的矩形數(shù)組節(jié)省了內(nèi)存空間,代價(jià)就是在創(chuàng)建和使用時(shí)也要按照其特點(diǎn)進(jìn)行操作。1.交錯(cuò)數(shù)組聲明交錯(cuò)數(shù)組的聲明格式如下圖所示。以下代碼演示的是上圖所示的交錯(cuò)數(shù)組的聲明方式。int jaggedArray = new int4 ;2.交錯(cuò)數(shù)組初始化和賦值若以行位單位對(duì)交錯(cuò)數(shù)組進(jìn)行初始化,然后對(duì)每個(gè)元素進(jìn)行賦值,則應(yīng)如圖所示。也可以直接給交錯(cuò)數(shù)組

9、初始化賦值,如下圖所示。還可以在聲明的同時(shí)初始化,如下圖所示。5.4 對(duì)數(shù)組的使用有時(shí)候?qū)?shù)組的合理利用將使編程變得比較容易,我們?cè)谶@一節(jié)就來(lái)給大家介紹一下如何利用數(shù)組。主要從兩大方面去講:數(shù)組作為方法參數(shù)以及類中的數(shù)組。5.4.1 數(shù)組作為方法參數(shù)數(shù)組可以作為參數(shù)傳遞給方法。因?yàn)閿?shù)組是引用類型,所以方法可以改變數(shù)組的值。數(shù)組作為方法參數(shù)的格式及舉例如下圖所示。根據(jù)參數(shù)類型不同調(diào)用方法不同,分為普通參數(shù)、ref參數(shù)、out參數(shù)和params參數(shù)來(lái)介紹數(shù)組作為方法參數(shù)的利用。方法就是函數(shù)。你可以這樣來(lái)理解:方法是某個(gè)類的功能或者行為。如:動(dòng)物會(huì)進(jìn)食,那么“進(jìn)食”就是“動(dòng)物”類的一個(gè)方法。從語(yǔ)法上

10、來(lái)說(shuō),方法有以下幾個(gè)要素:訪問(wèn)權(quán)限(如省略則為private),返回類型(如果不需要返回則寫void),函數(shù)名,參數(shù)(可以沒(méi)有,也可以有多個(gè)),函數(shù)體(如果返回類型不為空,那么函數(shù)體中必須要返回一個(gè)符合類型要求的返回值)以下是一個(gè)例子:/ 這是一個(gè)動(dòng)物類 public class Animal / public 是訪問(wèn)權(quán)限 / void 是返回類型,代表該方法不需要返回值 / Eat 是函數(shù)名 / 假設(shè)已經(jīng)有Food這個(gè)類,food是參數(shù) public void Eat(Food food) / 動(dòng)物進(jìn)食的相關(guān)代碼 1.普通參數(shù)根據(jù)數(shù)組分為一維數(shù)組、多維數(shù)組和交錯(cuò)數(shù)組,作為參數(shù)時(shí)也分為一維數(shù)組

11、作為參數(shù)、多維數(shù)組作為參數(shù)以及交錯(cuò)數(shù)組作為參數(shù)。交錯(cuò)數(shù)組作為參數(shù)不常見(jiàn),這里將不再介紹。將一維數(shù)組作為參數(shù)傳遞將一維數(shù)組作為參數(shù)的格式如下圖所示。下面的代碼就將一維數(shù)組array作為參數(shù)傳遞給了方法PrintArray()。void PrintArray (int array) / method code也可以在一個(gè)步驟中初始化并傳遞新數(shù)組,則上述代碼應(yīng)該改寫為PrintArray (new int 1, 3, 5, 7, 9 );也可以將多維數(shù)組傳遞給方法。如果聲明了一個(gè)多維數(shù)組Array,則將其作為參數(shù)時(shí)應(yīng)該是void PrintArray (int , arr) / method cod

12、e也可以在一個(gè)步驟中初始化并傳遞新數(shù)組,則上述程序應(yīng)改為PrintArray(new int , 1, 2 , 3, 4 , 5, 6 , 7, 8 );2.ref參數(shù)數(shù)組類型的ref參數(shù),格式就是在數(shù)組前加上ref。與所有的ref參數(shù)一樣,數(shù)組類型的ref參數(shù)必須由調(diào)用方明確賦值。3.out參數(shù)數(shù)組類型的out參數(shù),格式即在數(shù)組前加上out。在使用數(shù)組類型的out參數(shù)前必須先為其賦值,即必須由被調(diào)用方為其賦值。在示例6-16所示的例子中,在Main()方法中聲明數(shù)組theArray,并在FillArray()方法中初始化此數(shù)組,然后將數(shù)組元素返回調(diào)用方并顯示。4.params參數(shù)當(dāng)一個(gè)方法的

13、參數(shù)是數(shù)組類型且參數(shù)前加了params修飾符時(shí),該參數(shù)屬于數(shù)組類型的params參數(shù)。關(guān)鍵字params只需要在方法的參數(shù)列表中出現(xiàn)。通過(guò)加關(guān)鍵字params,方法被調(diào)用時(shí),可以傳遞一個(gè)值給參數(shù),也可以傳遞一個(gè)數(shù)組或者任意個(gè)數(shù)值,也就是參數(shù)的個(gè)數(shù)是任意的,這樣就保證了方法的靈活。5.4.2 類中的數(shù)組在類中,可以聲明一個(gè)數(shù)組型的字段,可以實(shí)例化一個(gè)數(shù)組型的對(duì)象,還可以將數(shù)組作為一種返回類型。1.數(shù)組型的字段在一個(gè)類中將數(shù)組作為字段與普通類型一樣,格式如下圖所示。數(shù)組型字段可以在聲明時(shí)賦值,在類中的使用與其他類型一樣。2.作為對(duì)象的數(shù)組在C#中,可以聲明數(shù)組型的對(duì)象。【示例6-19】演示的是聲明

14、數(shù)組型的對(duì)象。3.數(shù)組作為返回類型數(shù)組可以作為參數(shù)傳遞給方法,同樣方法也可以將數(shù)組作為返回類型,如下程序所示:public static int GetScores(ref int gameCnt)對(duì)這個(gè)方法的調(diào)用可以如下所示:int points = new int 1000;points = GetScores(ref gameCnt);5.5 對(duì)數(shù)組的操作對(duì)數(shù)組的操作包括很多,如復(fù)制數(shù)組、得到數(shù)組中某個(gè)元素的值、清空數(shù)組等,這些操作在前面有的已經(jīng)涉及到了,但是比較復(fù)雜。如果能有一種方法可以將數(shù)組作為參數(shù)傳入,調(diào)用方法后直接就能實(shí)現(xiàn)想要的結(jié)果,編程就能節(jié)省不少時(shí)間。C#提供了這樣的方法,這

15、些方法不管是什么類型,都可以從Array類繼承屬性,我們?cè)谶@一章就來(lái)介紹這些方法。5.5.1 清空數(shù)組想要將一個(gè)數(shù)組中的元素設(shè)置為0、false或null(具體取決于元素類型),需要用到Clear()方法。該方法有三個(gè)參數(shù),如下圖所示。5.5.2 創(chuàng)建數(shù)組副本如果想要?jiǎng)?chuàng)建一個(gè)數(shù)組的副本,則需要用到Clone()方法,這個(gè)方法不需要用到參數(shù)。5.5.3 復(fù)制一部分元素給另一數(shù)組如果想要將一個(gè)數(shù)組中的一部分元素復(fù)制給另一個(gè)數(shù)組,需要用到Copy()方法,該方法的參數(shù)列表及說(shuō)明如下圖所示。5.5.4 將當(dāng)前一維數(shù)組的所有元素賦值到指定的一維數(shù)組中如果想要將當(dāng)前一維數(shù)組的所有元素賦值到指定的一維數(shù)組中

16、,需要用到CopyTo()方法,該方法的參數(shù)列表如下圖所示。5.5.5 獲取某個(gè)元素的值前面我們用其他方法獲取過(guò)某個(gè)元素的值,這兒我們介紹一種可以直接獲取某個(gè)元素的值的方法GetValue(),這個(gè)方法只需要一個(gè)參數(shù),這個(gè)參數(shù)表示要獲取的值的索引。5.5.6 獲取元素的索引值 如果想要獲取某個(gè)元素的索引值,需要用到IndexOf()方法,該方法的參數(shù)列表如下圖所示。5.5.7 獲取某元素最后匹配項(xiàng)的索引在一維數(shù)組中,如果同一元素出現(xiàn)了好幾次,想要獲取該元素最后匹配項(xiàng)出現(xiàn)的索引值,需要用到LastIndexOf()方法,該方法的參數(shù)列表如下圖所示。5.5.8 反轉(zhuǎn)一維數(shù)組中的元素順序如果想要將一維數(shù)組中的元素順序反轉(zhuǎn),需要用到Reverse()方法。如果是將全部元素反轉(zhuǎn),則方法中只要一個(gè)參數(shù)即可,這個(gè)參數(shù)就是數(shù)組名?!臼纠?-27】以下代碼演示的是利用Reverse()方法將數(shù)組全部元素反轉(zhuǎn)。但是如果只是將一部分元素反轉(zhuǎn),則方法中需要有三個(gè)參數(shù),參數(shù)列表如下圖所示。【示例6-28】以下代碼演示的是利用Reverse()方法將部分元素反轉(zhuǎn)。5.5.9 為數(shù)組中的某個(gè)元素重新賦

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論