Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C#

การเข้าถึงองค์ประกอบ Two-Dimensional Array ใน C#

ภาพรวม

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 Array arr[row][col]
  • ดัชนีเริ่มจาก 0 เสมอ (Zero-based)
  • 2D Array เป็น Object เดียวใน Heap - Memory Contiguous → Cache Friendly
  • ไม่สามารถใช้ Array.Sort(arr) โดยตรงได้ ต้อง Flatten หรือเขียนเอง
  • ส่งผ่านเมธอด: void Process(int[,] matrix) - ระบุมิติใน Parameter