C#陣列教程
C#陣列教程
第二篇:C#陣列教程之2
I、基礎部分
一、陣列概述
·陣列是一組具有相同型別和名稱的變數的集合。
·這些變數稱為陣列的元素,每個陣列元素都有一個編號,這個編號叫做下標,我們可以通過下標來區別這些元素。
·陣列元素的個數被稱為陣列的長度。
·一般情況下,陣列的元素型別必須相同。但在PHP等中有所改變。
·C#中,陣列是System.Array類的一個例項。
·優缺點:優點:高效訪問給定下標的元素,程式設計簡單、直觀。缺點:例項化時必須指定陣列的大小,之後不能增刪元素(也就是非動態)。
C#中的陣列:
· C# 陣列中每個元素的型別必須相同;
· C# 陣列的下標是從 0 開始;
· C# 中沒有動態陣列,但可以用ArrayList實現類似動態陣列的功能;
· C# 中支援多維陣列及交錯陣列(Jagged Array)。
C# 支援一維陣列、多維陣列(矩形陣列)和鋸齒型陣列(或叫交錯陣列,陣列的陣列)。
二、宣告、例項化和初始化陣列
1.宣告陣列
下面的示例展示如何宣告不同型別的陣列:
一維陣列:
int[] numbers;
多維陣列:
string[,] names;
交錯陣列(陣列中的陣列):
byte[][] scores;
2、例項化陣列
宣告陣列(如上所示)並不實際建立它們。在 C# 中,陣列是物件(事實上,C#和.NET Framework中的所有東西都是物件),必須進行例項化。下面的示例展示如何建立陣列:
一維陣列:
int[] numbers = new int[5];
常見問題:
int[3] arr; //錯誤,不能這樣指定陣列大小
應該是:
int[] arr = new int[3]; //正確,宣告一個長度為 3 的 int 型別陣列,[]中的數字表示長度不是下標的上界。
多維陣列:
string[,] names = new string[5,4];
交錯陣列(鋸齒陣列或“陣列的陣列”):
交錯陣列是指陣列的元素又是一個陣列,這和多維陣列是不一樣的,也就是說,交錯陣列就是“陣列的陣列”。
byte[][] scores = new byte[5][];
for (int x = 0; x
{
scores[x] = new byte[4];
}
還可以有更大的陣列。例如,可以有三維的矩形陣列:
int[,,] buttons = new int[4,5,3];
甚至可以將矩形陣列和交錯陣列混合使用。例如,下面的程式碼宣告瞭型別為 int 的二維陣列的三維陣列的一維陣列。
int[][,,][,] numbers;
宣告陣列
int[][] arr = new int[3][];
arr[0] = new int[7];
arr[1] = new int[8];
arr[2] = new int[9];
以上陣列中 arr 是一個長度為 3 的陣列。
arr 的第一個元素是一個長度為 7 的陣列,第二個元素是一個長度為 8 的陣列,第三個元素是一個長度為 9 的陣列。
一定注意: int[][] arr = new int[3][]; 不能寫成 int[] arr = new int[3];
另外,初始化時第二個中括號中也不能有數值。
3、初始化陣列
C# 通過將初始值括在大括號 ({}) 內為在宣告時初始化陣列提供了簡單而直接了當的方法。下面的示例展示初始化不同型別的陣列的各種方法。
如上述的numbers可以用下面方式初始化:
numbers[0] = 1;
numbers[1] = 2;
numbers[2] = 3;
numbers[3] = 4;
numbers[4] = 5;
上述初始化方式很不簡潔,較簡潔的方式是:
numbers = new int[]{1,2,3,4,5};
4.簡潔化的做法
事實上,可以將宣告、例項化和初始化放在一起,變得更加簡潔方便,比如:
一維陣列
宣告陣列並賦初值
int[] numbers = new int[]{1,2,3,4,5,6}; //不定長
int[] numbers = new int[5] {1, 2, 3, 4, 5};//定長
string[] names = new string[3] {"Matt", "Joanne", "Robert"};
Note: [] 跟在型別名之後表示是個陣列,{} 表示要賦的初值列表,各個初值之間用英文逗號(,)隔開。
可省略陣列的大小,如下所示:
int[] numbers = new int[] {1, 2, 3, 4, 5};
string[] names = new string[] {"Matt", "Joanne", "Robert"};
如果提供了初始值設定項,則還可以省略 new 運算子,如下所示:
int[] numbers = {1, 2, 3, 4, 5};
string[] names = {"Matt", "Joanne", "Robert"};
C# 陣列也支援動態指定
int len = 3;
int[] arr = new int[len];
多維陣列
int[,] numbers = new int[3, 2] { {1, 2}, {3, 4}, {5, 6} };//定長
第一維的長度為 3,第二維的長度為 2。
string[,] siblings = new string[2, 2] { {"Johnson","Ju"}, {"Mary","Albert"} };
可省略陣列的大小,如:
int[,] numbers = new int[,] { {1, 2}, {3, 4}, {5, 6} };
string[,] siblings = new string[,] { {"Johnson","Ju"}, {"Mary","Albert"} };
如提供了初始值設定項,則還可以省略 new 運算子,如:
int[,] numbers = { {1, 2}, {3, 4}, {5, 6} };
賦值為“橫向掃描”賦值,該例相當於:
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"} };
交錯的陣列(陣列的陣列)
可以像下例所示那樣初始化交錯的陣列:
int[][] numbers = new int[2][] { new int[] {2,3,4}, new int[] {5,6,7,8,9} };
可省略第一個陣列的大小,如下所示:
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} };
請注意,對於交錯陣列的元素沒有初始化語法。
int[][] arr = new int[2][];
numbers[0] = new int[3];
numbers[1] = new int[5];
numbers[0][0] = 2;
如果此時設定:
numbers[0][2] = 6;那麼:
numbers = { new int[] {2,3,6}, new int[] {5,6,7,8,9} };
我們可以把numbers當作一個一維陣列來對待,陣列的陣列又可以當作一維陣列來對待。
交錯陣列也可以是“陣列的陣列的陣列”,以此類推:
int[][][] arr = new int[3][][];
arr[0] = new int[7][];
arr[0][0] = new int[3];
//...
注意 如果在宣告時沒有初始化陣列,則陣列成員將自動初始化為該陣列型別的預設初始值。另外,如果將陣列宣告為某型別的欄位,則當例項化該型別時它將被設定為預設值 null。
三、陣列的賦值取值
1、訪問陣列成員
訪問陣列成員可以直接進行,類似於在 C/C++ 中訪問陣列成員。
(1)位置定位法
例如:
int[] arr = new int[3];
arr[0] = 10; //給第一個元素賦值
int m = arr[0]; //取第一個元素的值
下面的程式碼建立一個名為 numbers 的陣列,然後向該陣列的第五個元素賦以 5:
int[] numbers = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0};
numbers[4] = 5; //注意索引是從0開始
下面的程式碼宣告一個多維陣列,並向位於 [1, 1] 的成員賦以 5:
int[,] numbers = { {1, 2}, {3, 4}, {5, 6}, {7, 8}, {9, 10} };
numbers[1, 1] = 5;
下面宣告一個一維交錯陣列,它包含兩個元素。第一個元素是兩個整數的陣列,第二個元素是三個整數的陣列:
int[][] numbers = new int[][] { new int[] {1, 2}, new int[] {3, 4, 5}
};
下面的語句向第一個陣列的第一個元素賦以 58,向第二個陣列的第二個元素賦以 667:
numbers[0][0] = 58;
numbers[1][1] = 667;
(2)迴圈訪問法
對陣列使用 foreach
C# 還提供 foreach 語句。該語句提供一種簡單、明瞭的方法來迴圈訪問陣列的元素。例如,下面的程式碼建立一個名為 numbers 的陣列,並用 foreach 語句迴圈訪問該陣列:
int[] numbers = {4, 5, 6, 1, 2, 3, -2, -1, 0};
foreach (int i in numbers)
{
System.Console.WriteLine(i);
}
由於有了多維陣列,可以使用相垃圾廣告法來迴圈訪問元素,例如:
int[,] numbers = new int[3, 2] {{1, 11}, {2, 22}, {3, 33}};
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/14601556/viewspace-557617/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- C#陣列教程之2C#陣列
- C#陣列教程之3C#陣列
- C#快速入門教程(19)—— 索引器與陣列C#索引陣列
- C#陣列相乘C#陣列
- c# 陣列排序C#陣列排序
- C#陣列引數C#陣列
- c# 陣列學習C#陣列
- JavaFX教程-修改陣列Java陣列
- 瞭解下C# 陣列(Array)C#陣列
- C#初始化陣列C#陣列
- C# 陣列的複製C#陣列
- C#中複製陣列C#陣列
- C#學習 陣列(22)C#陣列
- JavaFX教程-查詢陣列Java陣列
- Java入門教程七(陣列)Java陣列
- C#陣列與集合的區別C#陣列
- 【C#學習筆記】陣列使用C#筆記陣列
- C#實現控制元件陣列C#控制元件陣列
- c#二維陣列定義宣告C#陣列
- c# 方法引數_陣列引數C#陣列
- C# unsafe 快速複製陣列C#陣列
- 陣列呼叫c#讀取陣列中獲取最大最小值方法陣列C#
- Go 基礎教程--6 陣列 ArrayGo陣列
- Go 基礎教程--5 陣列 ArrayGo陣列
- C# 移除陣列中重複資料C#陣列
- C#位元組陣列與字串轉換C#陣列字串
- C#實現控制元件陣列 (轉)C#控制元件陣列
- 【C#】山脈陣列的峰頂索引C#陣列索引
- Java break、continue 詳解與陣列深入解析:單維陣列和多維陣列詳細教程Java陣列
- C#陣列 多個集合和陣列的操作(合併,去重,拆分,判斷)C#陣列
- c#列舉與陣列初始化及使用小記C#陣列
- NumPy 超詳細教程(1):NumPy 陣列陣列
- C#高效能陣列複製實驗C#陣列
- C#中陣列的三種訪問方式C#陣列
- c#之arraylist動態陣列小記(1)C#陣列
- C# string byte陣列轉換解析C#陣列
- c#簡單實現二維陣列和二維陣列列表List<>的轉置C#陣列
- JavaSE 陣列:一維陣列&二維陣列Java陣列