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

C# 陣列教學(二):Length 屬性、foreach 遍歷、交錯陣列 vs 矩形陣列

     編輯:關於C#

本單元掌握陣列 **唯讀屬性 Length**、**foreach 唯讀遍歷**,並深度對比 **矩形陣列** 與 **交錯陣列** 的記憶體佈局、宣告語法與遍歷差異。

1. Length 屬性 — 取得總元素數


int[] arr = new int[10];
Console.WriteLine(arr.Length); // 10

int[,] matrix = new int[3,4];
Console.WriteLine(matrix.Length); // 12 (3*4,所有維度總和)
Console.WriteLine(matrix.GetLength(0)); // 3 (第 0 維/列數)
Console.WriteLine(matrix.GetLength(1)); // 4 (第 1 維/行數)

⚠️ 多維陣列 Length 回傳**所有維度元素總數**,單一維度長度請用 GetLength(dimension)。

2. foreach 唯讀遍歷 — 簡潔、支援任意維度


int[,,] cube = new int[2,2,2] { {{1,2},{3,4}}, {{5,6},{7,8}} };

// 傳統 for 需 3 層迴圈
for (int i=0;i<2;i++)
  for (int j=0;j<2;j++)
    for (int k=0;k<2;k++)
      Console.WriteLine(cube[i,j,k]);

// foreach 一行搞定(按儲存順序線性輸出 1~8)
foreach (int val in cube) Console.WriteLine(val);

限制:foreach 迭代變數為 **唯讀**,無法修改陣列元素;需修改請用 for 索引存取。

3. 學生姓名錄入範例 — for 寫入 + foreach 讀出


Console.Write("學生人數:"); int n = int.Parse(Console.ReadLine());
string[] names = new string[n];

for (int i = 0; i < names.Length; i++)
{
    Console.Write($"第 {i+1} 位姓名:");
    names[i] = Console.ReadLine();
}

Console.WriteLine("\n--- 名單 ---");
foreach (string name in names) Console.WriteLine(name);

4. 交錯陣列 vs 矩形陣列 核心對比

特性矩形陣列 int[,]交錯陣列 int[][]
記憶體佈局單一連續區塊陣列的陣列,各行獨立配置
行長度固定,所有行相同每行可不同
宣告語法new int[3,4]new int[3][] 再逐行 new int[N]
索引語法arr[r,c]arr[row][col]
Length 含義總元素數外層陣列長度(行數)
適用場景矩陣運算、固定寬表格不規則資料、節省稀疏空間

交錯陣列宣告三種寫法


// 1. 分步:先定行數,再逐行定列數
var jagged = new int[4][];
jagged[0] = new int[6];
jagged[1] = new int[2];
jagged[2] = new int[3];
jagged[3] = new int[5];

// 2. 逐行直接賦值
var jagged2 = new int[4][];
jagged2[0] = new int[] {1,3,5,7,9,13};
jagged2[1] = new int[] {0,2};
jagged2[2] = new int[] {5,11,22};
jagged2[3] = new int[] {3,5,7,10,32};

// 3. 一次性初始化
var jagged3 = new int[][]
{
    new int[] {1,3,5,7,9},
    new int[] {0,2},
    new int[] {5,11,22},
    new int[] {3,5,7,10,32}
};

交錯陣列遍歷:雙層 foreach / for


string[][] data = new string[3][];
data[0] = new[] {"姓名","口頭禪","籍貫"};
data[1] = new[] {"劉大夫","很是費勁","《一日一囧》"};
data[2] = new[] {"蠟筆小新","老婆!"}; // 只有 2 欄

// foreach 寫法:先取行陣列,再取欄
foreach (string[] row in data)
{
    foreach (string col in row) Console.Write(col + "\t");
    Console.WriteLine();
}

// for 寫法:需分別取 row.Length
for (int r = 0; r < data.Length; r++)
{
    for (int c = 0; c < data[r].Length; c++)
        Console.Write(data[r][c] + "\t");
    Console.WriteLine();
}

記憶體差異實證:未賦值位置


// 交錯陣列:第 3 行只有 2 欄,第 3 欄根本不存在
// 矩形陣列:若宣告 [3,3],第 3 行第 3 欄佔位存在,值為 null
string[][] jagged = new string[3][];
jagged[2] = new string[2]; // 僅 2 欄

string[,] rect = new string[3,3]; // 固定 3x3

// 遍歷輸出會發現:矩形陣列第 3 行第 3 欄輸出 "-------"(null 佔位)
// 交錯陣列則直接只輸出 2 欄,第 3 欄不存在

教學重點總結

  1. Length:一維=元素數,多維=總元素數,單維長度用 GetLength(d)。
  2. foreach:支援任意維度線性遍歷,**唯讀**,修改請用 for。
  3. **矩形陣列** = 連續記憶體、固定寬、適合矩陣運算;**交錯陣列** = 陣列的陣列、行長可變、節省稀疏空間。
  4. 交錯陣列遍歷必須 **雙層迴圈**(先行後列),索引語法 arr[row][col]。
  5. 下一單元將講解 Array 靜態方法:Clear、IndexOf、Sort/Reverse。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved