C# 陣列採零基索引 (a[0] 為第一個元素),這與 Java、C/C++ 一致,但與 VB (1-based) 不同。陣列本身是參考型別,繼承自 System.Array,擁有 Length、Rank、GetLength() 等成員。
// 正確
int[] numbers;
string[,] matrix;
byte[][] jagged;
// 錯誤 (Java 風格)
int numbers[]; // CS0650: 錯誤的陣列宣告語法
// 宣告並實例化
int[] numbers = new int[5]; // 預設值 0
// 宣告同時初始化 (三種寫法等價)
int[] a1 = new int[5] {1, 2, 3, 4, 5};
int[] a2 = new int[] {1, 2, 3, 4, 5}; // 省略大小
int[] a3 = {1, 2, 3, 4, 5}; // 省略 new
// 存取
numbers[0] = 10;
int val = numbers[4]; // 第 5 個元素
// 宣告:逗號分隔維度
string[,] names = new string[3, 4]; // 3 列 4 行
// 初始化:巢狀大括號
int[,] matrix =
{
{1, 2},
{3, 4},
{5, 6}
};
// 存取:逗號分隔索引
matrix[1, 1] = 99; // 第 2 列第 2 行
特性:記憶體連續配置、Rank = 2、GetLength(0) 取得列數、GetLength(1) 取得行數。
// 宣告:多組括號
byte[][] scores = new byte[5][]; // 5 個列,每列長度待定
// 必須逐列實例化
for (int i = 0; i < scores.Length; i++)
scores[i] = new byte[i + 3]; // 每列不同長度
// 初始化簡寫
int[][] jagged =
{
new int[] {1, 2, 3},
new int[] {4, 5},
new int[] {6, 7, 8, 9}
};
特性:每列獨立配置記憶體、長度可異、scores[i].Length 取得第 i 列長度。
// 三維陣列
int[,,] cube = new int[4, 5, 3];
// 混合:交錯陣列的元素為多維陣列
int[][,,][,] complex; // 理論可行但極少實際使用
using System;
class ArrayDemo
{
static void Main()
{
// 1. 單維陣列
int[] numbers = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0};
numbers[4] = 5; // 第 5 個元素 (索引 4) 設為 5
// 2. 多維陣列
int[,] matrix = {{1, 2}, {3, 4}, {5, 6}, {7, 8}, {9, 10}};
matrix[1, 1] = 5; // 第 2 列第 2 行
// 3. 交錯陣列
byte[][] scores = new byte[5][];
for (int i = 0; i < scores.Length; i++)
scores[i] = new byte[i + 3];
// 輸出每列長度
for (int i = 0; i < scores.Length; i++)
Console.WriteLine($"Length of row {i} is {scores[i].Length}");
// 4. 陣列即物件:使用 Array 靜態方法與實例屬性
int[] data = {5, 2, 8, 1, 9};
Console.WriteLine($"Length: {data.Length}");
Console.WriteLine($"Rank: {data.Rank}");
Array.Sort(data);
Console.WriteLine($"Sorted: {string.Join(", ", data)}");
Console.WriteLine($"BinarySearch 8: {Array.BinarySearch(data, 8)}");
}
}
| 場景 | 建議 |
|---|---|
| 固定大小、高效能存取 | 陣列 T[] |
| 動態增刪、頻繁操作 | List<T> |
| 多維矩陣運算 | 多維陣列 T[,] 或 MathNet.Numerics |
| 不規則資料結構 | 交錯陣列 T[][] |
| 大量值型別資料 | 陣列優於 List (避免 Boxing、記憶體連續) |
int[] arr; arr[0] = 1; → NullReferenceExceptionarr[arr.Length] → IndexOutOfRangeExceptionint[,] 為矩形、int[][] 為交錯,語法與記憶體配置截然不同for 迴圈修改型別[] 變數,括號跟在型別後newSystem.Array,擁有 Length、Rank、排序、搜尋等功能