জ্যাগড অ্যারে (Jagged Array) হলো অ্যারে-অফ-অ্যারে যেখানে প্রতিটি সাব-অ্যারের সাইজ ভিন্ন হতে পারে। এর র্যাঙ্ক সবসময় ১, কিন্তু আউটার অ্যারের লেন্থ এবং প্রতিটি ইনার অ্যারের লেন্থ আলাদা আলাদা।
জ্যাগড অ্যারে ঘোষণা
int[][] jagged = new int[][]
{
new int[] { 0, 0 }, // Length 2
new int[] { 1, 2 }, // Length 2
new int[] { 2, 4 }, // Length 2
new int[] { 3, 6 }, // Length 2
new int[] { 4, 8 } // Length 2
};
প্রপার্টি এবং মেথড
| প্রপার্টি/মেথড | রিটার্ন | ব্যাখ্যা |
|---|---|---|
jagged.Length | 5 | আউটার অ্যারের লেন্থ (রো সংখ্যা) |
jagged.Rank | 1 | সবসময় ১ (এটি ১D অ্যারে) |
jagged[i].Length | ভেরিয়েবল | i-তম সাব-অ্যারের লেন্থ |
jagged.GetLength(0) | 5 | প্রথম ডাইমেনশনের সাইজ (Length-এর সমান) |
jagged.GetUpperBound(0) | 4 | প্রথম ডাইমেনশনের সর্বোচ্চ ইনডেক্স |
jagged.GetLowerBound(0) | 0 | প্রথম ডাইমেনশনের ন্যূনতম ইনডেক্স (সবসময় ০) |
সম্পূর্ণ উদাহরণ
using System;
public class Program
{
public static void Main()
{
int[][] arr = new int[][]
{
new int[] { 0, 0 },
new int[] { 1, 2 },
new int[] { 2, 4 },
new int[] { 3, 6 },
new int[] { 4, 8 }
};
Console.WriteLine($"আউটার লেন্থ (Rank 0): {arr.Length}");
Console.WriteLine($"Rank: {arr.Rank}");
Console.WriteLine($"Upper Bound (Rank 0): {arr.GetUpperBound(0)}");
Console.WriteLine($"Lower Bound (Rank 0): {arr.GetLowerBound(0)}");
Console.WriteLine("\nপ্রতিটি সাব-অ্যারের লেন্থ:");
for (int i = 0; i < arr.Length; i++)
{
Console.WriteLine($" arr[{i}].Length = {arr[i].Length}");
}
// ভেরিয়েবল লেন্থের উদাহরণ
Console.WriteLine("\nভেরিয়েবল লেন্থের জ্যাগড অ্যারে:");
int[][] varJagged = new int[][]
{
new int[] { 1 },
new int[] { 2, 3 },
new int[] { 4, 5, 6 },
new int[] { 7, 8, 9, 10 }
};
for (int i = 0; i < varJagged.Length; i++)
{
Console.WriteLine($" Row {i}: Length={varJagged[i].Length}, Values=[{string.Join(", ", varJagged[i])}]");
}
}
}
আউটপুট
আউটার লেন্থ (Rank 0): 5
Rank: 1
Upper Bound (Rank 0): 4
Lower Bound (Rank 0): 0
প্রতিটি সাব-অ্যারের লেন্থ:
arr[0].Length = 2
arr[1].Length = 2
arr[2].Length = 2
arr[3].Length = 2
arr[4].Length = 2
ভেরিয়েবল লেন্থের জ্যাগড অ্যারে:
Row 0: Length=1, Values=[1]
Row 1: Length=2, Values=[2, 3]
Row 2: Length=3, Values=[4, 5, 6]
Row 3: Length=4, Values=[7, 8, 9, 10]
জ্যাগড অ্যারে ট্রাভার্সাল
// নেস্টেড ফর লুপ
for (int i = 0; i < jagged.Length; i++)
{
for (int j = 0; j < jagged[i].Length; j++)
{
Console.Write($"{jagged[i][j]} ");
}
Console.WriteLine();
}
// foreach (রিড-অনলি)
foreach (var row in jagged)
{
foreach (var item in row)
{
Console.Write($"{item} ");
}
Console.WriteLine();
}
// LINQ ফ্ল্যাটেন
var allElements = jagged.SelectMany(row => row).ToArray();
জ্যাগড অ্যারে ইনিশিয়ালাইজেশন প্যাটার্ন
// প্যাটার্ন ১: সাইজ জানা থাকলে
int[][] jagged1 = new int[5][];
for (int i = 0; i < 5; i++)
jagged1[i] = new int[i + 1]; // প্রতিটি রো আলাদা সাইজ
// প্যাটার্ন ২: কালেকশন ইনিশিয়ালাইজার
int[][] jagged2 =
{
new int[] { 1, 2 },
new int[] { 3, 4, 5 },
new int[] { 6 }
};
// প্যাটার্ন ৩: LINQ থেকে
int[][] jagged3 = Enumerable.Range(1, 5)
.Select(i => Enumerable.Range(1, i).ToArray())
.ToArray();
সারসংক্ষেপ
- Rank: সবসময় ১ (এটি `int[]` এর অ্যারে)
- Outer Length: `jagged.Length` বা `jagged.GetLength(0)`
- Inner Lengths: `jagged[i].Length` (প্রতিটি আলাদা)
- GetUpperBound/GetLowerBound: শুধু আউটার ডাইমেনশন (0) এর জন্য কাজ করে
- টোটাল এলিমেন্ট: `jagged.Sum(row => row.Length)` বা `jagged.SelectMany(x => x).Count()`