آرایه های Jagged در سی شارپ (Jagged Arrays)

آرایه های Jagged در سی شارپ (Jagged Arrays)

Jagged در لغت به معنای «زنجیر»، «دندانه‌دار»، «ناهموار» و «مضرس» می‌باشد؛ و در سی‌شارپ، یک آرایه‌ی Jagged، آرایه‌ایست که المنت‌ها یا عناصر آن نیز یک آرایه هستند! عناصر یک آرایه‌ی Jagged، می‌توانند در ابعاد و سایزهای مختلفی باشند. نام دیگر آرایه‌های Jagged در برنامه‌نویسی، array of arrays (آرایه‌ای از آرایه‌ها) می‌باشد. در مثال‌های زیر، با نحوه‌ی تعریف، مقداردهی و دسترسی به آرایه‌های Jagged آشنا می‌شوید.

شروع به کار

در اینجا یک آرایه‌ی تک بعدی داریم که سه عنصر خواهد داشت؛ و هرکدام از آنها نیز یک آرایه‌ی تک بعدی از integer ها خواهند بود.

int[][] jaggedArray = new int[3][];

قبل از استفاده، عناصر باید مقداردهی شوند. برای مثال به صورت زیر:

jaggedArray[0] = new int[5];
jaggedArray[1] = new int[4];
jaggedArray[2] = new int[2];

همانطور که می‌بینید، هرکدام از عناصر یک آرایه‌ی تک بعدی از اعداد صحیح هستند.

  • عنصر اول، آرایه‌ای از اعداد صحیح با طول 5 می‌باشد.
  • عنصر دوم، آرایه‌ای از اعداد صحیح با طول 4 ومی‌باشد.
  • عنصر سوم، آرایه‌ای از اعداد صحیح با طول 2 می‌باشد.

می‌توانستیم هر عنصر را به صورت زیر نیز مقداردهی کنیم و در اینجا دیگر نیازی به مشخص کردن طول (اندازه) آرایه نخواهد بود:

jaggedArray[0] = new int[] { 1, 3, 5, 7, 9 };
jaggedArray[1] = new int[] { 0, 2, 4, 6 };
jaggedArray[2] = new int[] { 11, 22 };

و البته می‌توانستیم در همان جایی که آرایه را تعریف کردیم، به صورت زیر عمل کنیم:

int[][] jaggedArray2 = new int[][] 
{
    new int[] { 1, 3, 5, 7, 9 },
    new int[] { 0, 2, 4, 6 },
    new int[] { 11, 22 }
};

و جالب‌تر از همه اینکه می‌توانیم حتی new را نیز حذف کنیم و به صورت فرم کوتاه زیر بنویسیم:

int[][] jaggedArray3 = 
{
    new int[] { 1, 3, 5, 7, 9 },
    new int[] { 0, 2, 4, 6 },
    new int[] { 11, 22 }
};
نکته
همانطور که گفته شد، یک آرایه‌ی jagged، آرایه‌ای از آرایه‌ها می‌باشد! بنابراین، عناصر آن از نوع مرجع (reference type) هستند و مقدار پیشفرضشان null خواهد بود.

به صورت زیر می‌توان به عناصر دسترسی داشت و مقدار آنها را تغییر داد:

// خانه‌ی دوم عنصر اول را برابر 77 قرار میدهد
jaggedArray3[0][1] = 77;

// خانه‌ی دوم عنصر سوم را برابر 88 قرار میدهد
jaggedArray3[2][1] = 88;

ترکیب آرایه‌های jagged و چندبعدی

در این مثال، یک آرایه‌ی تک بعدی jagged داریم که عناصر آن، دوبعدی خواهند بود! به این معنا که ما آرایه‌ای نک بعدی از آرایه‌های دوبعدی داریم!

int[][,] jaggedArray4 = new int[3][,] 
{
    new int[,] { {1,3}, {5,7} },
    new int[,] { {0,2}, {4,6}, {8,10} },
    new int[,] { {11,22}, {99,88}, {0,9} } 
};

و حالا می‌توان به صورت دستی به آن دسترسی داشت:

System.Console.Write("{0}", jaggedArray4[0][1, 0]);

در اینجا، عنصر [1,0] از آرایه‌ی اول را چاپ کرده‌ایم!


طبیعتا می‌توان از متدها و سایرمواردی که آرایه‌های دیگر دارند، در Jagged ها نیز استفاده کرد! برای مثال، از Length برای فهمیدن اینکه چند آرایه در داخل آرایه‌ی jagged وجود دارد به صور زیر استفاده می‌کنیم:

System.Console.WriteLine(jaggedArray4.Length);

مثال نهایی

این مثال، یک آرایه‌ی jagged ایجاد می‌کند و هرکدام از عناصر آرایه، دارای اندازه‌های متفاوتی هستند:

class ArrayTest
{
    static void Main()
    {
        // آرایه‌ای که شامل دو عنصر آرایه است
        int[][] arr = new int[2][];

        // مقداردهی عناصر آرایه (یعنی دو آرایه‌ای که داخل آرایه پدر هستند)
        arr[0] = new int[5] { 1, 3, 5, 7, 9 };
        arr[1] = new int[4] { 2, 4, 6, 8 };

        // نمایش مقادیر عناصر
        for (int i = 0; i < arr.Length; i++)
        {
            System.Console.Write("Element({0}): ", i);

            for (int j = 0; j < arr[i].Length; j++)
            {
                System.Console.Write("{0}{1}", arr[i][j], j == (arr[i].Length - 1) ? "" : " ");
            }
            System.Console.WriteLine();            
        }
        // جلوگیری از بسته شدن کنسول برای مشاهده نتایج کد بالا
        System.Console.WriteLine("Press any key to exit.");
        System.Console.ReadKey();
    }
}

Output
Element(0): 1 3 5 7 9
Element(1): 2 4 6 8

 

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

cp-codfk

نظرات ثبت شده بدون دیدگاه

توضیحات پیشنهادی نظرات اشتراک