อาร์เรย์หลายมิติ (Multidimensional Arrays) ใน C#
C# รองรับอาร์เรย์หลายมิติ ประกอบด้วย Rectangular Arrays (อาร์เรย์สี่เหลี่ยม - ทุกแถวมีคอลัมน์เท่ากัน) และ Jagged Arrays (อาร์เรย์แจ็ก - อาร์เรย์ของอาร์เรย์ แต่ละแถวมีขนาดต่างกันได้)
1. Rectangular Arrays (หลายมิติจริง)
การประกาศ
// 2 มิติ: 4 แถว 4 คอลัมน์
int[,] matrix = new int[4, 4];
// 3 มิติ
int[,,] cube = new int[3, 4, 5];
การเริ่มต้นค่า
int[,] matrix = new int[4, 4]
{
{0, 1, 2, 3}, // แถว 0
{4, 5, 6, 7}, // แถว 1
{8, 9, 10, 11}, // แถว 2
{12, 13, 14, 15} // แถว 3
};
2. Jagged Arrays (อาร์เรย์ของอาร์เรย์)
// ประกาศ: 3 แถว แต่ละแถวขนาดต่างกัน
int[][] jagged = new int[3][];
jagged[0] = new int[] { 1, 2, 3 };
jagged[1] = new int[] { 4, 5 };
jagged[2] = new int[] { 6, 7, 8, 9 };
// หรือเริ่มต้นพร้อมกัน
int[][] jagged2 = new int[][]
{
new int[] { 1, 2, 3 },
new int[] { 4, 5 },
new int[] { 6, 7, 8, 9 }
};
ตัวอย่างโค้ดสมบูรณ์ (Rectangular Array)
using System;
namespace Program
{
class Demo
{
static void Main(string[] args)
{
// อาร์เรย์ 5 แถว 2 คอลัมน์
int[,] a = new int[5, 2]
{
{0, 0}, {1, 2}, {2, 4}, {3, 6}, {4, 8}
};
// วนลูปเข้าถึง: ใช้ GetLength(mimension)
for (int i = 0; i < a.GetLength(0); i++) // แถว
{
for (int j = 0; j < a.GetLength(1); j++) // คอลัมน์
{
Console.WriteLine($"a[{i},{j}] = {a[i,j]}");
}
}
Console.ReadKey();
}
}
}
ผลลัพธ์
a[0,0] = 0
a[0,1] = 0
a[1,0] = 1
a[1,1] = 2
a[2,0] = 2
a[2,1] = 4
a[3,0] = 3
a[3,1] = 6
a[4,0] = 4
a[4,1] = 8
การเปรียบเทียบ
| คุณสมบัติ | Rectangular Array [,] | Jagged Array [][] |
|---|---|---|
| หน่วยความจำ | ต่อเนื่อง (Contiguous) | กระจาย (แต่ละแถวแยกกัน) |
| ขนาดแถว | คงที่เท่ากันทุกแถว | ต่างกันได้ |
| ประสิทธิภาพ | Cache friendly | อาจช้ากว่า (pointer chasing) |
| Syntax เข้าถึง | arr[i, j] |
arr[i][j] |
| GetLength | GetLength(0), GetLength(1) |
Length (แถว), arr[i].Length (คอลัมน์) |
การวนลูป Jagged Array
for (int i = 0; i < jagged.Length; i++)
{
for (int j = 0; j < jagged[i].Length; j++)
{
Console.WriteLine($"jagged[{i}][{j}] = {jagged[i][j]}");
}
}
แนวทางเลือกใช้
- Rectangular: เมทริกซ์ ตารางข้อมูล ข้อมูลภาพ พิกัด (x,y,z)
- Jagged: ข้อมูลขนาดไม่เท่ากัน เช่น ข้อความแต่ละบรรทัดต่างความยาว, ตารางไม่สมมาตร