কম্পিউটার টিউটোরিয়াল

C#-এ জ্যাগড অ্যারের লেন্থ এবং র‍্যাঙ্ক বের করা

জ্যাগড অ্যারে (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.Length5আউটার অ্যারের লেন্থ (রো সংখ্যা)
jagged.Rank1সবসময় ১ (এটি ১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()`
  1. C#-এ অ্যারের র‍্যাঙ্ক কীভাবে ডিফাইন করবেন?

  2. C#-এ অ্যারে কীভাবে ইনিশিয়ালাইজ করবেন?

  3. C#-এ অ্যারের ডাইমেনশন সংখ্যা কীভাবে জানবেন?

  4. C#-এ অ্যারের দৈর্ঘ্য কীভাবে জানবেন?