陣列是程式設計中最基礎的資料結構。C# 提供固定大小的強型別 Array 與動態擴容的非泛型 ArrayList。本文從兩者的核心方法入手,建立陣列操作的直觀認知。
int[] nums = { 5, 4, 6, 3, 14, 9, 8, 17, 1, 24, -1, 0 };
Console.Write("排序前: "); nums.ToList().ForEach(i => Console.Write(i + " "));
int idxBefore = Array.IndexOf(nums, 14); // 線性搜尋索引
Console.WriteLine($"\n14 排序前索引: {idxBefore}"); // 4
Array.Sort(nums); // 就地排序
Console.Write("排序後: "); nums.ToList().ForEach(i => Console.Write(i + " "));
// -1 0 1 3 4 5 6 8 9 14 17 24
int idxAfter = Array.BinarySearch(nums, 14); // 二分搜尋(需已排序)
Console.WriteLine($"\n14 排序後索引: {idxAfter}"); // 9
string[] strArr = { "75.3", "25.999", "105.25" };
double[] dblArr = Array.ConvertAll(strArr, Convert.ToDouble); // 字串轉 double
Array.ForEach(dblArr, x => Console.Write(x + " ")); // 委派遍歷
// 輸出: 75.3 25.999 105.25
Array.ConvertAll 與 Array.ForEach 是函數式風格的靜態工具方法,簡化陣列轉換與遍歷代碼。
ArrayList al = new ArrayList();
Console.WriteLine("初始數量: " + al.Count); // 0
al.Add('C'); al.Add('A'); al.Add('E');
al.Add('B'); al.Add('D'); al.Add('F');
Console.WriteLine("新增 6 個後: " + al.Count); // 6
al.Remove('A'); // 移除值
Console.WriteLine("移除 A 後: " + al.Count); // 5
al.Add('a'); // 新增
Console.WriteLine("新增 a 後: " + al.Count); // 6
al[0] = 'X'; al[1] = 'Y'; al[2] = 'Z'; // 索引器修改
ArrayList numList = new ArrayList { 155, 413, -41, 818, 31, 191 };
Console.Write("原始: "); numList.Cast().ToList().ForEach(i => Console.Write(i + " "));
numList.Sort(); // 實例方法排序
Console.Write("\n排序後: "); numList.Cast().ToList().ForEach(i => Console.Write(i + " "));
// -41 31 155 191 413 818
int pos = numList.BinarySearch(413); // 實例方法二分搜尋
Console.WriteLine($"\n413 索引: {pos}"); // 4
| 操作 | Array (靜態) | ArrayList (動態) |
|---|---|---|
| 建立 | new int[10] 或 {1,2,3} | new ArrayList() |
| 大小 | 固定 | 自動擴容 |
| 新增元素 | 不支援 | Add(), Insert() |
| 移除元素 | 不支援 | Remove(), RemoveAt() |
| 排序 | Array.Sort(arr) | al.Sort() |
| 搜尋 | Array.BinarySearch(arr, val) | al.BinarySearch(val) |
| 類型安全 | 強型別 | Object (需轉型) |
List<T>,兼具強型別與動態擴容Array 靜態方法(Sort, BinarySearch, ConvertAll, ForEach)在高效能、函數式場景的價值ArrayList 僅用於維護 .NET 2.0 以前的舊代碼ToArray(), CopyTo(), List.ToArray()陣列操作是演算法實現的基石,熟練掌握排序、搜尋、轉換等核心 API,能顯著提升編碼效率與程式效能。