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) เช่น คะแนนนักเรียนแต่ละห้องเรียนคนละจำนวน