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

Jagged Arrays (อาร์เรย์ของอาร์เรย์) ใน C# - double[][]

Jagged Array คืออะไร?

Jagged Array (อาร์เรย์ข่วน) คือ อาร์เรย์ของอาร์เรย์ (Array of Arrays) ซึ่งแต่ละแถวสามารถมีขนาดต่างกันได้ แตกต่างจาก Multidimensional Array (Rectangular Array) ที่ทุกแถวต้องมีขนาดเท่ากัน

Syntax การประกาศ

// ประกาศ Jagged Array 2 มิติ
int[][] jaggedArray;

// หรือ
int[][] scores = new int[3][]; // 3 แถว แต่ยังไม่สร้างแถวย่อย

ใช้ [][] (brackets คู่) แทน [,] ของ rectangular array

การสร้างและเริ่มต้นค่า

วิธี 1: สร้างทีละแถว

int[][] marks = new int[5][]; // 5 แถว
marks[0] = new int[] { 90, 95 };
marks[1] = new int[] { 89, 94 };
marks[2] = new int[] { 78, 87 };
marks[3] = new int[] { 76, 68 };
marks[4] = new int[] { 98, 91 };

วิธี 2: Initializer แบบเต็ม (Inline)

int[][] marks = new int[][]
{
    new int[] { 90, 95 },
    new int[] { 89, 94 },
    new int[] { 78, 87 },
    new int[] { 76, 68 },
    new int[] { 98, 91 }
};

วิธี 3: แบบย่อ (Implicit typing)

var marks = new[]
{
    new[] { 90, 95 },
    new[] { 89, 94 },
    new[] { 78, 87 },
    new[] { 76, 68 },
    new[] { 98, 91 }
};

ตัวอย่างโค้ดสมบูรณ์

using System;

namespace MyApplication
{
    class MyDemoClass
    {
        static void Main(string[] args)
        {
            int i, j;
            
            /* Jagged array: 5 แถวของอาร์เรย์จำนวนเต็ม */
            int[][] marks = new int[][]
            {
                new int[] { 90, 95 },
                new int[] { 89, 94 },
                new int[] { 78, 87 },
                new int[] { 76, 68 },
                new int[] { 98, 91 }
            };
            
            for (i = 0; i < 5; i++)
            {
                for (j = 0; j < marks[i].Length; j++) // ใช้ Length ของแต่ละแถว
                {
                    Console.WriteLine("marks[{0}][{1}] = {2}", i, j, marks[i][j]);
                }
            }
            
            Console.ReadKey();
        }
    }
}

ผลลัพธ์

marks[0][0] = 90
marks[0][1] = 95
marks[1][0] = 89
marks[1][1] = 94
marks[2][0] = 78
marks[2][1] = 87
marks[3][0] = 76
marks[3][1] = 68
marks[4][0] = 98
marks[4][1] = 91

Jagged Array vs Multidimensional Array

คุณสมบัติ Jagged Array ([][]) Multidimensional Array ([,])
ขนาดแถว ต่างกันได้ ต้องเท่ากันทุกแถว
หน่วยความจำ กระจาย (non-contiguous) ติดกัน (contiguous)
ประสิทธิภาพการเข้าถึง เร็วกว่า (CLR optimize) ช้ากว่าเล็กน้อย
Syntax arr[row][col] arr[row, col]
GetLength arr.Length (จำนวนแถว), arr[i].Length arr.GetLength(0), arr.GetLength(1)

การใช้งานขั้นสูง

Jagged Array 3 มิติ

// 3 มิติ: int[][][]
int[][][] cube = new int[2][][];
cube[0] = new int[3][];
cube[0][0] = new int[] { 1, 2 };
cube[0][1] = new int[] { 3, 4, 5 };
// ...

Jagged Array ของ Object/Reference Type

string[][] names = new string[3][];
names[0] = new[] { "Alice", "Bob" };
names[1] = new[] { "Charlie" };
names[2] = new[] { "David", "Eve", "Frank" };

สรุป

  • Jagged Array = type[][] (อาร์เรย์ของอาร์เรย์)
  • แต่ละแถวมีขนาดต่างกันได้ (Flexible)
  • เข้าถึงด้วย arr[row][col]
  • ประสิทธิภาพดีกว่า Multidimensional Array
  • เหมาะสำหรับข้อมูลที่ไม่สม่ำเสมอ (ragged data) เช่น คะแนนนักเรียนแต่ละห้องเรียนคนละจำนวน