數組
10.1 數組
ps:建議多使用一維數組和交錯數組(性能更高)
數組實際上是由一個變量名稱表示的一組同類型的數據元素。每個元素通過變量名稱和一個或多個方括號中的索引來訪問
數組的訪問方式:
數組名 索引
MyArray[index]
10.1.1 關於數組的重要定義
- 元素 數組的獨立數據項稱作元素。數組的所有元素必須是相同類型的,或繼承自相同類型
- 秩/維度 數組可以有任何爲正數的維度數。數組的維度稱作 秩
- 維度長度 數組的每一個維度有一個長度,就是這個方向的位置個數
- 數組長度 數組的所有維度中的元素的總和稱作數組的長度
在C#中數組一旦創建,大小就固定了(C#不支持動態數組)
數組的索引從 0 開始
10.2 數組的類型
C#提供了兩種類型的數組
- 一維數組可以認爲是單行元素或元素向量
- 多維數組是由主向量中的位置組成,每一個位置本身又是一個數組,稱爲子數組。子數組向量中的位置本身又是一個子數組
- 還有兩種類型的多維數組:矩陣數組和交錯數組
矩陣數組和交錯數組的特徵
矩陣數組
某個維度的所有子數組有相同長度的多維數組
不管有多少維度,總是使用一組方括號
ps:int x = myArray[4, 6, 1]
交錯數組
每一個子數組都是獨立數組的多維數組
可以有不同長度的子數組
爲數組的每一個維度使用一對方括號
ps:Array[2][7][4]
10.3 數組是對象
數組實例是從System.Array繼承的對象。由於數組是從BCL基類繼承,它們也繼承了很多有用的方法
- Rank 返回數組維度數的屬性
- Length 返回數組長度(數組中所有元素的個數)的屬性
儘管數組總是引用類型,但是數組的元素可以是值類型也可以是引用類型
- 如果存儲的元素都是類值類型,數組被稱作值類型數組
- 如果存儲在數組中的元素都是引用類型對象,數組被稱爲引用類型數組
10.4 一維數組
一維數組的聲名:
秩說明符:, 英文逗號
數據類型[ 秩說明符 ] 數組名;
一維數組聲明並實例化的方式:
數據類型 [] 數組名 = new 數據類型[ 數組長度 ];
數據類型 [] 數組名 = new 數據類型[]{ 數據1, 數據2, ....};
數據類型 [] 數組名 = { 數據1, 數據2, ....};
數據類型 [] 數組名 = new 數據類型[ 數組長度 ]{ 數據1, 數據2, ....};
10.5 矩陣數組
矩陣數組的聲明:
數據類型 [ , , ] 數組名; //三維數組
數據類型 [ , ] 數組名; //二維數組
矩形數組的聲明應注意以下幾點:
- 可以使用任意多的秩說明符
- 不能在數組類型區域中放數組維度長度。秩是數組類型的一部分,而維度長度不是類型的一部分
- 數組聲明後,維度數就是固定的了。然而,維度長度直到數組實例化時纔會確定
矩陣數組的實例化:
ps:int [ , , ] arr = new int [3,6,2];
矩陣數組實例化和爲數據初始化方式類似
10.6 交錯數組
交錯數組是數組的數組。與矩陣數組不同,交錯數組的子數組的元素個數可以不同
// arr是3個int數組的數組(讀法)
int [][] arr = new int [3][]; //聲明並創建頂層數組
... //聲明並創建子數組
聲明方式:
交錯數組的聲明語法要求每一個維度都有一對獨立的方括號。數組變量聲明中的方括號數決定了數組的秩
- 交錯數組可能的維度可以是大於1的任意整數
- 和矩形數組一樣,維度長度不能包括在數組類型的聲明部分
int[][] SomeArr;
//秩等於2
int[][][] OtherArr;
/秩等於3
實例化交錯數組
int [][] Arr = new int[3][]; //實例化頂層數組
Arr[0] = new int []{1, 2, 3}; //實例化子數組
Arr[1] = new int []{12, 22, 32, 42}; //實例化子數組
Arr[2] = new int []{10, 20, 30, 40, 50}; //實例化子數組
10.7 數組繼承的有用成員(部分)
成員 | 類型 | 生存期 | 意義 |
---|---|---|---|
Rank | 屬性 | 實例 | 獲取數組的維度數 |
Length | 屬性 | 實例 | 獲取數組中所有維度的元素總和 |
GetLength | 方法 | 實例 | 返回數組的指定維度的長度 |
Clear | 方法 | 靜態 | 將某一範圍內的元素設置爲0或nu1l |
Sort | 方法 | 靜態 | 在一維數組中對元素進行排序 |
BinarySearch | 方法 | 靜態 | 使用二進制搜索,搜索一維數組中的值 |
Clone | 方法 | 實例 | 進行數組的淺複製——對於值類型數組和引用類型數組,都只複製元素 |
Indexof | 方法 | 靜態 | 返回一維數組中遇到的第一個值 |
Reverse | 方法 | 靜態 | 反轉一維數組中的某一範圍內的元素 |
GetUpperBound | 方法 | 實例 | 獲取指定維度的上限 |
10.8 foreach語句
foreach語法:
froeach( Type Indentifiter in ArrayNmae) { Satement }
- 迭代變量是臨時的,並且和數組中元素的類型相同。foreach語句使用迭代變量來相繼表示數組中的每一個元素
- Type 是數組中元素的類型,可以顯示提供,也可以使用 var 隱式的通過編譯器來推斷
- Indentifiter 迭代變量的名字
- ArrayName 要處理數組的名字
- Satement 語句或語句塊