Jagged Array (Array of Arrays) คือ อาร์เรย์ที่แต่ละ Element เป็นอีก Array หนึ่ง แถวแต่ละแถวสามารถมีขนาดต่างกันได้
Syntax
// ประกาศ
int[][] jaggedArray;
// ประกาศและกำหนดค่า
int[][] points = new int[][]
{
new int[] {10, 5},
new int[] {30, 40},
new int[] {70, 80},
new int[] {60, 70}
};
การเข้าถึง
// points[row][column] int value = points[2][1]; // 80
โค้ดตัวอย่างเต็ม
using System;
namespace Demo
{
class Program
{
static void Main(string[] args)
{
int[][] pages = new int[][]
{
new int[] {400, 345},
new int[] {320, 444},
new int[] {900, 430},
new int[] {890, 340}
};
for (int i = 0; i < pages.Length; i++)
{
for (int j = 0; j < pages[i].Length; j++) // ใช้ pages[i].Length
{
Console.WriteLine("a[{0}][{1}] = {2}", i, j, pages[i][j]);
}
}
Console.ReadKey();
}
}
}
ผลลัพธ์
a[0][0] = 400 a[0][1] = 345 a[1][0] = 320 a[1][1] = 444 a[2][0] = 900 a[2][1] = 430 a[3][0] = 890 a[3][1] = 340
Jagged Array vs 2D Array
| คุณสมบัติ | Jagged Array (int[][]) | 2D Array (int[,]) |
|---|---|---|
| Syntax | arr[i][j] | arr[i,j] |
| ขนาดแถว | ต่างกันได้ | คงที่ (Rectangular) |
| Memory | Non-contiguous (Array of References) | Contiguous Block |
| Rank Property | 1 | 2 |
| Performance | ช้ากว่าเล็กน้อย | เร็วกว่า (Cache Friendly) |
| Initialize | ยืดหยุ่นกว่า | ต้องรู้ขนาดล่วงหน้า |
เมื่อไหร่ควรใช้ Jagged Array
- ข้อมูลแถวไม่เท่ากัน (Ragged Data) เช่น จำนวนนักเรียนต่อห้องเรียน
- ต้องการเพิ่ม/ลบแถวได้ (Reassign inner array)
- ประหยัด Memory เมื่อแถวมีขนาต่างมาก