System.Array 提供豐富的靜態方法統一操作所有陣列類型。本文系統歸納陣列建立、搜尋、排序、複製、清除、多維建立等核心靜態方法,並附帶實際代碼驗證。
一、陣列定義與初始化
// 標準語法
int[] classNum = new int[20]; // 宣告並配置
// 初始化列表
int[] intArray = { 1, 2, 1, 3 };
// 多維陣列
int[,] matrix = new int[3, 4];
int[,,] cube = new int[2, 3, 4];
二、核心靜態方法分類詳解
1. 搜尋方法
| 方法 | 說明 |
IndexOf(Array, value) | 一維陣列線性搜尋首個匹配索引 |
IndexOf(Array, value, startIndex) | 從指定索引開始搜尋 |
IndexOf(Array, value, startIndex, count) | 指定範圍搜尋 |
LastIndexOf(...) | 反向搜尋最後匹配索引 |
BinarySearch(Array, value) | 二分搜尋(陣列必須已排序) |
BinarySearch(Array, value, IComparer) | 自訂比較器二分搜尋 |
BinarySearch(Array, index, length, value) | 指定範圍二分搜尋 |
驗證範例
int[] arr = { 1, 2, 1, 3 };
Console.WriteLine("IndexOf 1: " + Array.IndexOf(arr, 1)); // 0
Console.WriteLine("LastIndexOf 1: " + Array.LastIndexOf(arr, 1)); // 2
2. 排序方法
Sort(Array):就地排序(實作 IComparable 的元素)
Sort(Array, IComparer):自訂比較器排序
Sort(Array, index, length):部分排序
Sort(keys, items):依鍵陣列排序並同步調整值陣列
3. 複製與建立
| 方法 | 用途 |
Copy(src, dest, length) | 陣列間複製指定長度 |
Copy(src, srcIdx, dest, destIdx, length) | 指定雙側索引複製 |
CreateInstance(Type, length) | 動態建立一維陣列 |
CreateInstance(Type, len1, len2) | 動態建立二維陣列 |
CreateInstance(Type, lengths[]) | 動態建立多維陣列 |
CreateInstance(Type, lengths[], lowerBounds[]) | 指定各維下限建立 |
4. 其他實用方法
Clear(Array, index, length):將範圍元素設為預設值(0/null/false)
Reverse(Array) / Reverse(Array, index, length):反轉
SetValue(value, index...) / GetValue(index...):動態索引存取
Clone():實例方法,淺層複製
AsReadOnly(Array):回傳唯讀包裝
三、動態建立多維陣列實戰
// 建立 2x3 二維陣列
Array matrix = Array.CreateInstance(typeof(int), 2, 3);
matrix.SetValue(10, 0, 0);
matrix.SetValue(20, 1, 2);
Console.WriteLine("matrix[0,0]=" + matrix.GetValue(0, 0)); // 10
Console.WriteLine("matrix[1,2]=" + matrix.GetValue(1, 2)); // 20
// 建立自訂下限陣列 (索引從 1 開始)
Array custom = Array.CreateInstance(typeof(string), new[] { 3 }, new[] { 1 });
custom.SetValue("A", 1); custom.SetValue("B", 2); custom.SetValue("C", 3);
Console.WriteLine("custom[1]=" + custom.GetValue(1)); // A
四、完整驗證程式碼
int[] intArray = { 1, 2, 1, 3 };
Console.WriteLine("Array.IndexOf(intArray, 1) = " + Array.IndexOf(intArray, 1)); // 0
Console.WriteLine("Array.LastIndexOf(intArray, 1) = " + Array.LastIndexOf(intArray, 1)); // 2
輸出結果見圖示。
五、最佳實踐提醒
- BinarySearch 前必須 Sort,否則結果未定義
- Copy 目標陣列必須預先配置足夠大小
- CreateInstance 適用於運行時才確定類型/維度的動態場景
- 多維陣列優於交錯陣列(
[][])於記憶體連續性與快取友善度
- 現代代碼優先使用
Span<T>/Memory<T> 進行零複製切片操作
熟練掌握 Array 靜態方法,是處理陣列演算法、序列化、互操作等底層開發的基本功。
- 上一篇文章: C# 陣列屬性與實例方法深度解析
- 下一篇文章: C# 日期時間處理全攻略:DateTime、TimeSpan 與運算實戰
Copyright ©
程式碼之家 All Rights Reserved