首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 陣列屬性與方法完整速查:一維多維、索引、排序、複製、複製、Clone 與界限檢查

     編輯:關於C語言

一、陣列核心屬性


int[] arr = new int[5];
for (int i = 0; i < 5; i++) arr[i] = i + 1;

Console.WriteLine($"IsFixedSize: {arr.IsFixedSize}");     // True
Console.WriteLine($"IsReadOnly: {arr.IsReadOnly}");       // False
Console.WriteLine($"IsSynchronized: {arr.IsSynchronized}"); // False
Console.WriteLine($"Length: {arr.Length}");               // 5
Console.WriteLine($"LongLength: {arr.LongLength}");       // 5 (long)
Console.WriteLine($"Rank: {arr.Rank}");                   // 1 (維度)
Console.WriteLine($"SyncRoot: {arr.SyncRoot}");           // 同步鎖物件

陣列屬性輸出

二、索引與界限檢查

  • 索引從 0 開始,合法範圍 0 ~ Length-1
  • 越界拋 IndexOutOfRangeException(執行期檢查,效能微小開銷)

// 錯誤示範
int[] a = new int[5];
a[5] = 10; // IndexOutOfRangeException

索引越界例外

三、Array 靜態方法與實例方法完整對照

分類方法說明範例
搜尋與排序IndexOf(Array, value)尋找第一個相符索引Array.IndexOf(arr, 3)
LastIndexOf(Array, value)尋找最後相符索引
BinarySearch(Array, value)二分搜尋(需已排序)
Reverse(Array)反轉元素順序Array.Reverse(arr)
Sort(Array)排序(預設遞增)Array.Sort(arr)
Sort(Array, IComparer)自訂比較器排序
AsReadOnly(Array)回傳唯讀包裝Array.AsReadOnly(arr)
資訊查詢GetLength(dimension)指定維度長度arr.GetLength(0)
GetLongLength(dimension)long 版長度
GetLowerBound(dimension)指定維度下限(通常 0)arr.GetLowerBound(0)
GetUpperBound(dimension)指定維度上限arr.GetUpperBound(0)
GetValue(indices...)取值(支援多維)arr.GetValue(2)
SetValue(value, indices...)設值(支援多維)arr.SetValue(111, 0)
GetEnumerator()取得列舉器
GetHashCode()雜湊碼
GetType()型別資訊
複製與轉換Clone()淺層複製(新陣列,元素同參考)int[] c = (int[])arr.Clone()
CopyTo(Array, index)複製到目標陣列arr.CopyTo(dest, 0)
Copy(Array, Array, length)靜態高效複製Array.Copy(src, dst, 5)
ConstrainedCopy原子性複製(全成功或全失敗)

四、Clone vs CopyTo 深度比較


int[] original = { 1, 2, 3 };
int[] cloned = (int[])original.Clone();
int[] copied = new int[original.Length];
original.CopyTo(copied, 0);

// 修改複製品
cloned[0] = 10;
copied[1] = 20;

Console.WriteLine("Original: " + string.Join(",", original)); // 1,2,3
Console.WriteLine("Cloned:   " + string.Join(",", cloned));   // 10,2,3
Console.WriteLine("Copied:   " + string.Join(",", copied));   // 1,20,3

Clone與CopyTo結果 多維陣列操作

五、多維陣列與交錯陣列

多維陣列 (Rectangular Array)


int[,] matrix = new int[3, 4]; // 3列4行
matrix[1, 2] = 99;
Console.WriteLine($"Rank: {matrix.Rank}"); // 2
Console.WriteLine($"Length: {matrix.Length}"); // 12
Console.WriteLine($"GetLength(0): {matrix.GetLength(0)}"); // 3
Console.WriteLine($"GetLength(1): {matrix.GetLength(1)}"); // 4

交錯陣列


int[][] jagged = new int[3][];
jagged[0] = new int[2];
jagged[1] = new int[5];
jagged[2] = new int[3];
// 每列長度可不同

六、安全迴圈模式:GetLowerBound/GetUpperBound


int[] arr = new int[5];
for (int i = arr.GetLowerBound(0); i <= arr.GetUpperBound(0); i++)
    arr[i] = i + 1;

for (int i = arr.GetLowerBound(0); i <= arr.GetUpperBound(0); i++)
    Console.WriteLine($"arr[{i}] = {arr[i]}");

適用於任意維度、任意下限(雖然 C# 陣列下限固定 0)。

七、效能與最佳實務

  1. 熱路徑用 for 迴圈:避免 foreach 列舉器配置
  2. 大量複製用 Array.Copy 或 Buffer.BlockCopy:高度優化
  3. 值類型大陣列考慮 Span<T>/Memory<T>:避免配置、支援切片
  4. 多維陣列存取較慢:交錯陣列或一維陣列手動計算索引更快
  5. 避免頻繁 Resize:預估容量用 List<T> 再 ToArray()

總結

C# 陣列提供豐富的靜態/實例方法涵蓋搜尋、排序、複製、界限查詢。核心屬性 Length、Rank、GetLowerBound/GetUpperBound 構成安全存取基礎。Clone() 建立新陣列,CopyTo() 複製到既有陣列,兩者皆為淺層複製。現代高效能場景請優先考慮 Span<T>、Memory<T>、ArrayPool<T> 進階 API。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved