مرجع تخصصی برنامه نویسان

انجمن تخصصی برنامه نویسان فارسی زبان

کاربر سایت

neda_hagh

عضویت از 1395/02/07

jagged array

  • جمعه 12 آذر 1395
  • 12:29
تشکر میکنم

سلام دوستان

روزتون بخیر

jagged array چیه؟میشه لطفا راهنماییم کنید؟

پاسخ های این پرسش

تعداد پاسخ ها : 2 پاسخ
کاربر سایت

ایمان مدائنی

عضویت از 1392/01/20

  • جمعه 12 آذر 1395
  • 12:40

آرایه دندانه دار

آرایه دندانه دار یا jagged array آرایه ای چند بعدی است که دارای سطرهای با طول متغیر می باشد. نمونه ساده ای از آرایه های چند بعدی ، آرایه های مستطیلی است که تعداد ستون های سطرهای آنها برابر است. اما آرایه های دندانه دار دارای سطرهایی با طول متفاوت می باشند. بنابر این آرایه های دندانه دار را می توان آرایه ای از آرایه ها فرض کرد. دستور نوشتن این نوع آرایه ها به صورت زیر است :

datatype[][] arrayName;

ابتدا datatype که نوع آرایه است و سپس چهار کروشه باز و بسته و بعد از آن نام آرایه را می نویسیم. مقداردهی به این آرایه ها کمی گیج کننده است. به مثال زیر توجه کنید :

int[][] myArrays = new int[3][];

myArrays[0] = new int[3];
myArrays[1] = new int[5];
myArrays[2] = new int[2];

jagged-array-1001
ابتدا با استفاده از کلمه کلیدی new سطرهای آرایه را مشخص می کنیم. بعد از کلمه کلیدی new نوع آرایه و سپس در اولین کروشه باز و بسته تعداد سطرها را می نویسیم. سپس تعداد ستون های هر سطر را با استفاده از اندیس هر سطر به صورت بالا مشخص می کنیم. سپس بعد از تعریف ستون ها به صورت زیر می توان با استفاده از آکولاد مقادیر هر سطر را مشخص کرد :

int[][] myArrays = new int[3][];

myArrays[0] = new int[3] { 1, 2, 3 };
myArrays[1] = new int[5] { 5, 4, 3, 2, 1 };
myArrays[2] = new int[2] { 11, 22 };

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

int[][] myArrays = new int[3][] { new int[3] { 1, 2, 3 },
                                  new int[5] { 5, 4, 3, 2, 1 },
                                  new int[2] { 11, 22 } };

می توان طول سطرها را هم مشخص نکرد :

int[][] myArrays = new int[][] { new int[] { 1, 2, 3 },
                                 new int[] { 5, 4, 3, 2, 1 },
                                 new int[] { 11, 22 } };

کد بالا را به صورت سادهتر زیر هم می توان نوشت :

int[][] myArrays = { new int[] { 1, 2, 3 },
                     new int[] { 5, 4, 3, 2, 1 },
                     new int[] { 11, 22 } };

برای دسترسی به مقدار عناصر یک آرایه دندانه دار باید اندیس سطر و ستون آن را در اختیار داشته باشیم :

array[row][column]
Console.WriteLine(myArrays[1][2]);

نمی توان از حلقه foreach برای دسترسی به عناصر آرایه دندانه دار استفاده کرد :

foreach(int array in myArrays)
{
    Console.WriteLine(array);
}

اگر از حلقه foreach استفاده کنیم با خطا مواجه می شویم چون عناصر این نوع آرایه ها ، آرایه هستند نه عدد یا رشته یا… .برای حل این مشکل باید نوع متغیر موقتی (array) را تغییر داده و از حلقه foreach دیگری برای دسترسی به مقادیر استفاده کرد.

foreach(int[] array in myArrays)
{
   foreach(int number in array)
   {
      Console.WriteLine(number);
   }
}

همچنین می توان از یک حلقه for تو در تو به صورت زیر استفاده کرد :

for (int row = 0; row < myArrays.Length; row++)
{
   for (int col = 0; col < myArrays[row].Length; col++)
   {
      Console.WriteLine(myArrays[row][col]);
   }
}

در اولین حلقه از خاصیت Length برای به دست آوردن تعداد سطرها (که همان آرایه های یک بعدی هستند)و در دومین حلقه از خاصیت Length برای به دست آوردن عناصر سطر جاری استفاده می شود.

منبع : w3-farsi

کاربر سایت

neda_hagh

عضویت از 1395/02/07

  • جمعه 12 آذر 1395
  • 13:03

خیلی خیلی خیلیییی ممنونم آقای مدائنی همیشه موفق و پیروز باشید

کاربرانی که از این پست تشکر کرده اند

هیچ کاربری تا کنون از این پست تشکر نکرده است

اگر نیاز به یک مشاور در زمینه طراحی سایت ، برنامه نویسی و بازاریابی الکترونیکی دارید

با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)