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

C# 陣列完全指南:宣告、初始化、多維與交錯陣列實戰

     編輯:關於C語言

C# 陣列核心觀念:從零開始的索引世界

C# 陣列採零基索引 (a[0] 為第一個元素),這與 Java、C/C++ 一致,但與 VB (1-based) 不同。陣列本身是參考型別,繼承自 System.Array,擁有 Length、Rank、GetLength() 等成員。

宣告語法:括號跟在型別後


// 正確
int[] numbers;
string[,] matrix;
byte[][] jagged;

// 錯誤 (Java 風格)
int numbers[];  // CS0650: 錯誤的陣列宣告語法

三種陣列型態

1. 單維陣列


// 宣告並實例化
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 個元素

2. 多維陣列 (矩形陣列)


// 宣告:逗號分隔維度
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) 取得行數。

3. 交錯陣列 (陣列的陣列)


// 宣告:多組括號
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; → NullReferenceException
  • 索引越界:arr[arr.Length] → IndexOutOfRangeException
  • 多維 vs 交錯混淆:int[,] 為矩形、int[][] 為交錯,語法與記憶體配置截然不同
  • foreach 無法修改元素:迭代變數為唯讀,需用 for 迴圈修改

本章小結

  • 陣列宣告:型別[] 變數,括號跟在型別後
  • 三大類型:單維、多維 (矩形)、交錯 (陣列的陣列)
  • 初始化三種寫法,可省略大小或 new
  • 陣列繼承 System.Array,擁有 Length、Rank、排序、搜尋等功能
  • 選擇正確陣列型態對效能與記憶體使用有重大影響
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved