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

การใช้ Multi-dimensional Arrays ใน C#

ภาพรวม

Multi-dimensional Arrays (อาร์เรย์หลายมิติ) ใน C# เรียกอีกอย่างว่า Rectangular Arrays (อาร์เรย์สี่เหลี่ยมผืนผ้า) เพราะทุกแถวมีจำนวนคอลัมน์เท่ากันทุกแถว ต่างจาก Jagged Array ที่แต่ละแถวขนาดต่างกันได้

การประกาศ (Declaration)

string[,] names;        // 2 มิติ
int[,,] cube;           // 3 มิติ
int[,] matrix = new int[3, 4]; // 3 แถว 4 คอลัมน์

ใช้คอมมา , คั่นมิติภายในวงเล็บ

การเริ่มต้นค่า (Initialization)

// 4 แถว 4 คอลัมน์
int[,] a = new int[4, 4] 
{
    { 0, 1, 2, 3 },   // แถว 0
    { 4, 5, 6, 7 },   // แถว 1
    { 8, 9, 10, 11 }, // แถว 2
    { 12, 13, 14, 15 } // แถว 3
};

ตัวอย่างโปรแกรม

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 } 
            };
            
            int i, j;
            
            // วนลูปเข้าถึง: a[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]);
                }
            }
            
            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

คุณสมบัติและเมธอดสำคัญ

เมธอด/Propertyคำอธิบายตัวอย่าง
Rankจำนวนมิติa.Rank = 2
Lengthจำนวนองค์ประกอบทั้งหมดa.Length = 10
GetLength(dimension)ขนาดของมิติที่ระบุ (0-based)a.GetLength(0) = 5 (แถว)
GetLowerBound(dimension)ดัชนีต่ำสุดของมิติ (มักเป็น 0)a.GetLowerBound(0) = 0
GetUpperBound(dimension)ดัชนีสูงสุดของมิติa.GetUpperBound(1) = 1

การเข้าถึงองค์ประกอบ

int value = a[2, 1]; // แถว 2, คอลัมน์ 1 = 4
a[3, 0] = 99;        // กำหนดค่า

การวนลูปแบบมาตรฐาน

for (int i = 0; i < arr.GetLength(0); i++)      // แถว
{
    for (int j = 0; j < arr.GetLength(1); j++)  // คอลัมน์
    {
        Console.Write(arr[i, j] + " ");
    }
    Console.WriteLine();
}

เปรียบเทียบ: Multi-dimensional vs Jagged Array

คุณสมบัติMulti-dimensional [,]Jagged [][]
โครงสร้างหน่วยความจำSingle Block (Contiguous)Array of Arrays (Non-contiguous)
ขนาดแถวคงที่ (Rectangular)แตกต่างกันได้ (Ragged)
Syntax การเข้าถึงarr[i, j]arr[i][j]
ประสิทธิภาพCache Friendly, เร็วกว่าPointer Chasing, ช้ากว่าเล็กน้อย
CLR SupportStandardOptimized (Special IL)
ใช้เมื่อMatrix, Grid, Image, TableRagged Data, Sparse Matrix

ข้อสังเกตสำคัญ

  • 2D Array เหมาะสำหรับ Matrix Math, Image Processing, Game Board (Chess, Tic-Tac-Toe)
  • ไม่สามารถใช้ Array.Sort() โดยตรงได้ (ต้อง Flatten หรือเขียนเอง)
  • foreach วนทีละองค์ประกอบแบบ Row-Major Order
  • ส่งผ่านเมธอด: void Method(int[,] arr) - ต้องระบุมิติในพารามิเตอร์