ภาพรวม
Two-Dimensional Array (2D Array) ใน C# จัดเก็บข้อมูลแบบตาราง มี แถว (Rows) และ คอลัมน์ (Columns) เข้าถึงองค์ประกอบแต่ละตัวโดยใช้ สองดัชนี (Row Index, Column Index) คั่นด้วยคอมมา: arr[row, col]
ตัวอย่างโปรแกรม
using System;
namespace Demo
{
class MyArray
{
static void Main(string[] args)
{
// อาร์เรย์ 5 แถว 2 คอลัมน์
int[,] a = new int[5, 2]
{
{ 0, 0 }, { 1, 2 }, { 2, 4 }, { 3, 6 }, { 4, 8 }
};
int i, j;
// วนลูปแสดงทุกองค์ประกอบ
for (i = 0; i < 5; i++)
{
for (j = 0; j < 2; j++)
{
Console.WriteLine("a[{0},{1}] = {2}", i, j, a[i, j]);
}
}
// เข้าถึงองค์ประกอบเฉพาะตัว: แถว 1, คอลัมน์ 1
int x = a[1, 1];
Console.WriteLine("a[1,1] = " + x);
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 a[1,1] = 2
การจัดเก็บในหน่วยความจำ (Memory Layout)
C# ใช้ Row-Major Order - เก็บข้อมูลต่อเนื่องกันแถวละแถว:
Logical: Physical Memory (Contiguous): a[0,0] a[0,1] 0, 0, 1, 2, 2, 4, 3, 6, 4, 8 a[1,0] a[1,1] ^ ^ ^ a[2,0] a[2,1] | | | a[3,0] a[3,1] Index Index Index a[4,0] a[4,1] 0,1 2,3 4,5
เมธอดสำคัญของ Array Class
| เมธอด | คำอธิบาย | ตัวอย่าง |
|---|---|---|
GetLength(dimension) | ขนาดของมิติที่ระบุ (0=Rows, 1=Cols) | arr.GetLength(0) → 5 |
GetLongLength(dimension) | ขนาดแบบ 64-bit (สำหรับอาร์เรย์ใหญ่ > 2^31) | arr.GetLongLength(1) → 2 |
GetLowerBound(dimension) | ดัชนีต่ำสุด (มักเป็น 0) | arr.GetLowerBound(0) → 0 |
GetUpperBound(dimension) | ดัชนีสูงสุด | arr.GetUpperBound(1) → 1 |
Rank | จำนวนมิติ | arr.Rank → 2 |
Length | จำนวนองค์ประกอบทั้งหมด (Rows × Cols) | arr.Length → 10 |
การวนลูปแบบปลอดภัย (ใช้ GetLength)
for (int i = 0; i < arr.GetLength(0); i++) // Rows
{
for (int j = 0; j < arr.GetLength(1); j++) // Columns
{
Console.Write(arr[i, j] + " ");
}
Console.WriteLine();
}ข้อสังเกตสำคัญ
- Syntax:
arr[row, col](คอมมาในวงเล็บเดียว) - ต่างจาก Jagged Arrayarr[row][col] - ดัชนีเริ่มจาก 0 เสมอ (Zero-based)
- 2D Array เป็น Object เดียวใน Heap - Memory Contiguous → Cache Friendly
- ไม่สามารถใช้
Array.Sort(arr)โดยตรงได้ ต้อง Flatten หรือเขียนเอง - ส่งผ่านเมธอด:
void Process(int[,] matrix)- ระบุมิติใน Parameter