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

วิธีกำหนดอาร์เรย์หลายมิติใน C#

อาร์เรย์หลายมิติ (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: ข้อมูลขนาดไม่เท่ากัน เช่น ข้อความแต่ละบรรทัดต่างความยาว, ตารางไม่สมมาตร