C#數(shù)組教程 第二篇:C#數(shù)組教程之2 第三篇:C#數(shù)組教程之3
I、基礎(chǔ)部分 一、數(shù)組概述 ·數(shù)組是一組具有相同類型和名稱的變量的集合。 ·這些變量稱為數(shù)組的元素,每個(gè)數(shù)組元素都有一個(gè)編號(hào),這個(gè)編號(hào)叫做下標(biāo),我們可以通過下標(biāo)來區(qū)別這些元素。 ·數(shù)組元素的個(gè)數(shù)被稱為數(shù)組的長(zhǎng)度。 ·一般情況下,數(shù)組的元素類型必須相同。但在PHP等中有所改變。 ·C#中,數(shù)組是System.Array類的一個(gè)實(shí)例。 ·優(yōu)缺點(diǎn):優(yōu)點(diǎn):高效訪問給定下標(biāo)的元素,編程簡(jiǎn)單、直觀。缺點(diǎn):實(shí)例化時(shí)必須指定數(shù)組的大小,之后不能增刪元素(也就是非動(dòng)態(tài))。 C#中的數(shù)組: · C# 數(shù)組中每個(gè)元素的類型必須相同; · C# 數(shù)組的下標(biāo)是從 0 開始; · C# 中沒有動(dòng)態(tài)數(shù)組,但可以用ArrayList實(shí)現(xiàn)類似動(dòng)態(tài)數(shù)組的功能; · C# 中支持多維數(shù)組及交錯(cuò)數(shù)組(Jagged Array)。
C# 支持一維數(shù)組、多維數(shù)組(矩形數(shù)組)和鋸齒型數(shù)組(或叫交錯(cuò)數(shù)組,數(shù)組的數(shù)組)。
二、聲明、實(shí)例化和初始化數(shù)組 1.聲明數(shù)組 下面的示例展示如何聲明不同類型的數(shù)組: 一維數(shù)組: int[] numbers; 多維數(shù)組: string[,] names; 交錯(cuò)數(shù)組(數(shù)組中的數(shù)組): byte[][] scores;
2、實(shí)例化數(shù)組 聲明數(shù)組(如上所示)并不實(shí)際創(chuàng)建它們。在 C# 中,數(shù)組是對(duì)象(事實(shí)上,C#和.NET Framework中的所有東西都是對(duì)象),必須進(jìn)行實(shí)例化。下面的示例展示如何創(chuàng)建數(shù)組: 一維數(shù)組: int[] numbers = new int[5]; 常見問題: int[3] arr; //錯(cuò)誤,不能這樣指定數(shù)組大小 應(yīng)該是: int[] arr = new int[3]; //正確,聲明一個(gè)長(zhǎng)度為 3 的 int 類型數(shù)組,[]中的數(shù)字表示長(zhǎng)度不是下標(biāo)的上界。
多維數(shù)組: string[,] names = new string[5,4]; 交錯(cuò)數(shù)組(鋸齒數(shù)組或“數(shù)組的數(shù)組”): 交錯(cuò)數(shù)組是指數(shù)組的元素又是一個(gè)數(shù)組,這和多維數(shù)組是不一樣的,也就是說,交錯(cuò)數(shù)組就是“數(shù)組的數(shù)組”。
byte[][] scores = new byte[5][]; for (int x = 0; x < scores.Length; x++) { scores[x] = new byte[4]; } 還可以有更大的數(shù)組。例如,可以有三維的矩形數(shù)組: int[,,] buttons = new int[4,5,3]; 甚至可以將矩形數(shù)組和交錯(cuò)數(shù)組混合使用。例如,下面的代碼聲明了類型為 int 的二維數(shù)組的三維數(shù)組的一維數(shù)組。 int[][,,][,] numbers;
聲明數(shù)組 int[][] arr = new int[3][]; arr[0] = new int[7]; arr[1] = new int[8]; arr[2] = new int[9]; 以上數(shù)組中 arr 是一個(gè)長(zhǎng)度為 3 的數(shù)組。 arr 的第一個(gè)元素是一個(gè)長(zhǎng)度為 7 的數(shù)組,第二個(gè)元素是一個(gè)長(zhǎng)度為 8 的數(shù)組,第三個(gè)元素是一個(gè)長(zhǎng)度為 9 的數(shù)組。
一定注意: int[][] arr = new int[3][]; 不能寫成 int[] arr = new int[3]; 另外,初始化時(shí)第二個(gè)中括號(hào)中也不能有數(shù)值。
3、初始化數(shù)組 C# 通過將初始值括在大括號(hào) ({}) 內(nèi)為在聲明時(shí)初始化數(shù)組提供了簡(jiǎn)單而直接了當(dāng)?shù)姆椒āO旅娴氖纠故境跏蓟煌愋偷臄?shù)組的各種方法。 如上述的numbers可以用下面方式初始化: numbers[0] = 1; numbers[1] = 2; numbers[2] = 3; numbers[3] = 4; numbers[4] = 5; 上述初始化方式很不簡(jiǎn)潔,較簡(jiǎn)潔的方式是: numbers = new int[]{1,2,3,4,5};
4.簡(jiǎn)潔化的做法 事實(shí)上,可以將聲明、實(shí)例化和初始化放在一起,變得更加簡(jiǎn)潔方便,比如: 一維數(shù)組 聲明數(shù)組并賦初值 int[] numbers = new int[]{1,2,3,4,5,6}; //不定長(zhǎng) int[] numbers = new int[5] {1, 2, 3, 4, 5};//定長(zhǎng) string[] names = new string[3] {"Matt", "Joanne", "Robert"}; Note: [] 跟在類型名之后表示是個(gè)數(shù)組,{} 表示要賦的初值列表,各個(gè)初值之間用英文逗號(hào)(,)隔開。
可省略數(shù)組的大小,如下所示: int[] numbers = new int[] {1, 2, 3, 4, 5}; string[] names = new string[] {"Matt", "Joanne", "Robert"}; 如果提供了初始值設(shè)定項(xiàng),則還可以省略 new 運(yùn)算符,如下所示: int[] numbers = {1, 2, 3, 4, 5}; string[] names = {"Matt", "Joanne", "Robert"};
C# 數(shù)組也支持動(dòng)態(tài)指定 int len = 3; int[] arr = new int[len];
多維數(shù)組 int[,] numbers = new int[3, 2] { {1, 2}, {3, 4}, {5, 6} };//定長(zhǎng) 第一維的長(zhǎng)度為 3,第二維的長(zhǎng)度為 2。 string[,] siblings = new string[2, 2] { {"Johnson","Ju"}, {"Mary","Albert"} }; 可省略數(shù)組的大小,如: int[,] numbers = new int[,] { {1, 2}, {3, 4}, {5, 6} }; string[,] siblings = new string[,] { {"Johnson","Ju"}, {"Mary","Albert"} }; 如提供了初始值設(shè)定項(xiàng),則還可以省略 new 運(yùn)算符,如: int[,] numbers = { {1, 2}, {3, 4}, {5, 6} }; 賦值為“橫向掃描”賦值,該例相當(dāng)于: numbers[0, 0] = 1; numbers[0, 1] = 2; numbers[1, 0] = 3; numbers[1, 1] = 4; numbers[2, 0] = 5; numbers[2, 1] = 6;
string[,] siblings = { {"Johnson", "Ju"}, {"Mary", "Albert"} };
交錯(cuò)的數(shù)組(數(shù)組的數(shù)組) 可以像下例所示那樣初始化交錯(cuò)的數(shù)組: int[][] numbers = new int[2][] { new int[] {2,3,4}, new int[] {5,6,7,8,9} }; 可省略第一個(gè)數(shù)組的大小,如下所示: int[][] numbers = new int[][] { new int[] {2,3,4}, new int[] {5,6,7,8,9} }; 或: int[][] numbers = { new int[] {2,3,4}, new int[] {5,6,7,8,9} }; 請(qǐng)注意,對(duì)于交錯(cuò)數(shù)組的元素沒有初始化語法。
int[][] arr = new int[2][]; numbers[0] = new int[3]; numbers[1] = new int[5]; numbers[0][0] = 2; 如果此時(shí)設(shè)置: numbers[0][2] = 6;那么: numbers = { new int[] {2,3,6}, new int[] {5,6,7,8,9} }; 我們可以把numbers當(dāng)作一個(gè)一維數(shù)組來對(duì)待,數(shù)組的數(shù)組又可以當(dāng)作一維數(shù)組來對(duì)待。
交錯(cuò)數(shù)組也可以是“數(shù)組的數(shù)組的數(shù)組”,以此類推: int[][][] arr = new int[3][][]; arr[0] = new int[7][]; arr[0][0] = new int[3]; //...
注意 如果在聲明時(shí)沒有初始化數(shù)組,則數(shù)組成員將自動(dòng)初始化為該數(shù)組類型的默認(rèn)初始值。另外,如果將數(shù)組聲明為某類型的字段,則當(dāng)實(shí)例化該類型時(shí)它將被設(shè)置為默認(rèn)值 null。
三、數(shù)組的賦值取值 1、訪問數(shù)組成員 訪問數(shù)組成員可以直接進(jìn)行,類似于在 C/C++ 中訪問數(shù)組成員。 (1)位置定位法 例如: int[] arr = new int[3]; arr[0] = 10; //給第一個(gè)元素賦值 int m = arr[0]; //取第一個(gè)元素的值 下面的代碼創(chuàng)建一個(gè)名為 numbers 的數(shù)組,然后向該數(shù)組的第五個(gè)元素賦以 5: int[] numbers = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0}; numbers[4] = 5; //注意索引是從0開始 下面的代碼聲明一個(gè)多維數(shù)組,并向位于 [1, 1] 的成員賦以 5: int[,] numbers = { {1, 2}, {3, 4}, {5, 6}, {7, 8}, {9, 10} }; numbers[1, 1] = 5; 下面聲明一個(gè)一維交錯(cuò)數(shù)組,它包含兩個(gè)元素。第一個(gè)元素是兩個(gè)整數(shù)的數(shù)組,第二個(gè)元素是三個(gè)整數(shù)的數(shù)組: int[][] numbers = new int[][] { new int[] {1, 2}, new int[] {3, 4, 5} }; 下面的語句向第一個(gè)數(shù)組的第一個(gè)元素賦以 58,向第二個(gè)數(shù)組的第二個(gè)元素賦以 667: numbers[0][0] = 58; numbers[1][1] = 667; (2)循環(huán)訪問法 對(duì)數(shù)組使用 foreach C# 還提供 foreach 語句。該語句提供一種簡(jiǎn)單、明了的方法來循環(huán)訪問數(shù)組的元素。例如,下面的代碼創(chuàng)建一個(gè)名為 numbers 的數(shù)組,并用 foreach 語句循環(huán)訪問該數(shù)組: int[] numbers = {4, 5, 6, 1, 2, 3, -2, -1, 0}; foreach (int i in numbers) { System.Console.WriteLine(i); } 由于有了多維數(shù)組,可以使用相垃圾廣告法來循環(huán)訪問元素,例如: int[,] numbers = new int[3, 2] {{1, 11}, {2, 22}, {3, 33}}; <SPA |
|