Multi-dimensional Array (Rectangular Array)
อาเรย์หลายมิติที่มีขนาดคงที่ในทุกมิติ (Rectangular) - ทุกแถวมีจำนวนคอลัมน์เท่ากัน
Syntax และการประกาศ
// 2 มิติ (2D) - 3 แถว 4 คอลัมน์
int[,] matrix = new int[3, 4];
// 3 มิติ (3D) - 2x3x4
int[,,] cube = new int[2, 3, 4];
// Initialization
int[,] matrix2 = new int[,] {
{ 1, 2, 3 },
{ 4, 5, 6 },
{ 7, 8, 9 }
};
การเข้าถึงข้อมูล
int value = matrix[1, 2]; // แถว 1 คอลัมน์ 2 (0-based)
matrix[0, 0] = 100;
// วนลูป
for (int i = 0; i < matrix.GetLength(0); i++) { // Rows
for (int j = 0; j < matrix.GetLength(1); j++) { // Columns
Console.Write(matrix[i, j] + " ");
}
Console.WriteLine();
}
Jagged Array (Array of Arrays)
อาเรย์ของอาเรย์ - แต่ละแถวเป็น Array แยกกัน สามารถมีขนาดต่างกันได้ (Ragged/Ragged)
Syntax และการประกาศ
// Jagged Array - 4 แถว ขนาดต่างกัน
int[][] jagged = new int[4][];
jagged[0] = new int[] { 1, 2 };
jagged[1] = new int[] { 3, 4, 5, 6 };
jagged[2] = new int[] { 7 };
jagged[3] = new int[] { 8, 9, 10 };
// หรือ Initialize ทีเดียว
int[][] jagged2 = new int[][] {
new int[] { 0, 0 },
new int[] { 1, 2 },
new int[] { 2, 4 },
new int[] { 3, 6 }
};
การเข้าถึงข้อมูล
int value = jagged[1][2]; // แถว 1, คอลัมน์ 2 = 5
// วนลูป - แต่ละแถวอาจมีขนาดต่างกัน
for (int i = 0; i < jagged.Length; i++) {
for (int j = 0; j < jagged[i].Length; j++) {
Console.Write(jagged[i][j] + " ");
}
Console.WriteLine();
}
ตารางเปรียบเทียบสรุป
| คุณสมบัติ | Multi-dimensional Array | Jagged Array |
|---|---|---|
| Syntax | int[,] int[,,] |
int[][] int[][][] |
| หน่วยความจำ | Per Block (Contiguous) | Array of References + Separate Arrays |
| ขนาดแถว | คงที่ (Rectangular) | แตกต่างกันได้ (Ragged) |
| Rank (Rank Property) | > 1 (เช่น 2, 3) | 1 (เสมอ - เป็น Array ของ Array) |
| GetLength() | GetLength(0), GetLength(1) |
Length (Outer), arr[i].Length (Inner) |
| ประสิทธิภาพ | ดีกว่า (Cache Friendly) | ช้ากว่าเล็กน้อย (Indirection) |
| CLS Compliant | ✅ | ❌ (ไม่ใช่ CLS Compliant) |
| เหมาะสำหรับ | Matrix, Grid, Image, Table | Sparse Data, Variable Row Size |
ตัวอย่างเปรียบเทียบหน่วยความจำ
// Multi-dimensional: 1 Block Memory
int[,] multi = new int[1000, 1000]; // ~4 MB contiguous
// Jagged: 1000 Arrays + 1 Array of References
int[][] jagged = new int[1000][];
for (int i = 0; i < 1000; i++) {
jagged[i] = new int[1000]; // 1000 separate allocations
}
เมื่อไหร่ควรใช้อะไร?
- Multi-dimensional: Matrix คณิตศาสตร์, Image Processing, Game Board, Spreadsheet - ข้อมูลสี่เหลี่ยมผืนผ้า
- Jagged Array: Sparse Matrix, ไฟล์ CSV ที่แถวไม่เท่ากัน, Tree Structures, Adjacency List - ขนาดแถวแตกต่างกัน