在 C# 中,數組是一種用于存儲固定大小的相同類型元素的集合。數組可以包含值類型、引用類型或對象類型的元素,并且在內存中是連續存儲的。以下是關于 C# 數組的詳細介紹:
1. 一維數組
聲明與初始化
// 聲明數組
int[] numbers; ? ? ? ? ? ? // 聲明但未初始化
int[] scores = new int[5]; // 初始化長度為5的數組(默認值為0)
?
// 聲明并初始化元素
string[] names = new string[3] { "Alice", "Bob", "Charlie" };
int[] primes = { 2, 3, 5, 7, 11 }; ? ? ? // 簡化語法
訪問與修改元素
int[] arr = new int[3];
arr[0] = 100; ? ? ? ? ?// 設置元素
int value = arr[0]; ? ?// 獲取元素(索引從0開始)
數組長度
int length = arr.Length; // 獲取數組長度(只讀屬性)
2. 多維數組
二維數組
// 聲明與初始化
int[,] matrix = new int[3, 4]; ? ? ? ? ?// 3行4列的矩陣
int[,] table = { {1,2}, {3,4}, {5,6} }; // 3行2列
?
// 訪問元素
matrix[0, 1] = 10; ?// 第1行第2列
int val = table[2, 0]; // 獲取第3行第1列的值
三維數組
int[,,] cube = new int[2, 2, 2]; // 三維數組
cube[0, 1, 0] = 20;
3. 交錯數組(數組的數組)
交錯數組是一個數組,其元素是數組,每個子數組可以有不同的長度。
// 聲明與初始化
int[][] jaggedArray = new int[3][]; ?// 包含3個數組的交錯數組
jaggedArray[0] = new int[2]; ? ? ? ? // 第一個子數組長度為2
jaggedArray[1] = new int[3] {1,2,3}; // 第二個子數組長度為3
?
// 簡化語法
int[][] jagged = {new int[] {1,2},new int[] {3,4,5}
};
?
// 訪問元素
int x = jagged[1][2]; // 獲取第二個子數組的第三個元素
4. 數組方法與屬性
常用屬性
Length
:獲取數組總元素數(多維數組返回所有維度的乘積)。Rank
:獲取數組的維數(例如,二維數組返回 2)。
常用方法
int[] nums = { 3, 1, 4 };
?
// 排序
Array.Sort(nums); ? ? ? ? // 升序排序:[1,3,4]
?
// 反轉
Array.Reverse(nums); ? ? ?// 反轉數組:[4,3,1]
?
// 查找元素
int index = Array.IndexOf(nums, 3); // 返回索引1
?
// 填充元素
Array.Fill(nums, 0); ? ? ?// 所有元素設為0:[0,0,0]
?
// 復制數組
int[] copy = new int[3];
Array.Copy(nums, copy, 3); // 復制nums到copy
5. 數組遍歷
for 循環
int[] arr = { 1, 2, 3 };
for (int i = 0; i < arr.Length; i++) {Console.WriteLine(arr[i]);
}
foreach 循環
foreach (int num in arr) {Console.WriteLine(num);
}
LINQ 查詢
using System.Linq;
var evenNums = arr.Where(n => n % 2 == 0);
6. 數組與泛型集合
數組是固定大小的,而泛型集合(如 List<T>
)可以動態調整大小:
using System.Collections.Generic;
?
List<int> list = new List<int>();
list.Add(10); ? ? ? ? // 添加元素
list.AddRange(arr); ? // 添加數組元素
int count = list.Count; // 獲取元素數
7. 參數數組(params)
允許方法接受可變數量的參數:
void PrintNumbers(params int[] numbers) {foreach (int num in numbers) {Console.WriteLine(num);}
}
?
// 調用
PrintNumbers(1, 2, 3); ? ? // 傳遞多個參數
PrintNumbers(new int[]{4,5}); // 傳遞數組
8. 數組協變(Covariance)
引用類型數組支持協變,即子類數組可以隱式轉換為父類數組:
object[] objArray = new string[5]; // 合法:string是object的子類
objArray[0] = "hello";
objArray[1] = 123; // 運行時異常:不能將int賦值給string[]
總結
類型 | 語法 | 特點 |
---|---|---|
一維數組 | int[] arr; | 元素連續存儲,固定長度 |
多維數組 | int[,] matrix; | 矩形結構,每維長度固定 |
交錯數組 | int[][] jagged; | 數組的數組,子數組長度可變 |
參數數組 | params int[] numbers | 方法接受可變數量的參數 |
數組是 C# 中基礎且重要的數據結構,適合存儲和處理固定大小的數據集。對于動態數據,建議使用泛型集合(如 List<T>
)。