0

آرايه‌ها(Arrays) در #c – بخش اول

 
amirpetrucci0261
amirpetrucci0261
کاربر طلایی1
تاریخ عضویت : تیر 1388 
تعداد پست ها : 27726
محل سکونت : http://zoomstar.ir/

آرايه‌ها(Arrays) در #c – بخش اول

يكي ديگر از انواع داده‌اي در زبان C#، آرايه‌ها (Arrays) مي‌باشند. يك آرايه را به عنوان مخزني براي نگهداري اطلاعات در نظر مي‌گيريم كه داراي ليستي از محلهايي است كه در آنها اطلاعات ذخيره شده است و از طريق اين ليست مي‌توان به اطلاعات آنها دسترسي پيدا نمود. به هنگام اعلان آرايه‌ها بايد نوع، اندازه و تعداد بعد آنها را نيز معين نمود.
آرایه ها در سی شارپ به این صورت تعریف می گردند :

int[] TestArray
float[] average;
double[] numbers;

یعنی ابتدا نوع آرایه ، سپس علامتهای [] و آنگاه نام آرایه را ذکر می کنیم.


از آنجایی که آرایه ها جزو انواع داده ای ارجاعی به حساب می آیند ، آرایه تعریف شده تا زمانی که به استفاده از کلمه کلیدی new تقاضای درخواست حافظه نکند ، قابل استفاده نیست. برای این کار مطابق مثال زیر عمل میکنیم :

TestArray = new int[20];

ابتدا نام آرایه و سپس عملگر = را ذکر می کنیم. سپس عملگر new و بعد از آن نام آرایه به همراه نوع آرایه. عددی که داخل [] ذکر می شود تعداد عناصر آرایه را مشخص میکند. در مثال بالا یک آرایه 20 عنصری از نوع int خواهیم داشت.

average = new float[10];
numbers = new double[10];

می توان این دو مرحله را در یک خط انجام داد :

int[] TestArray = new int[20];
float[] average = new float[10];
double[] numbers = new double[10];

دسترسي به عناصر آرايه

دسترسي به عناصر آرايه از طريق انديس امكان پذير است. انديس شماره محل ذخيره‌سازي داده‌هاي ما مي‌باشد كه با دادن اين شماره مي‌توانيم به داده مورد نظر دسترسي پيدا كنيم. در C# همانند C و C++ انديس خانه‌هاي آرايه از صفر آغاز مي‌گردد يعني اولين خانه آرايه داراي شماره صفر است و عناصر بعدي به ترتيب يك واحد به انديسشان اضافه مي‌گردد. پس شماره انديس آرايه هميشه يك واحد كمتر از تعداد عناصر آن است، يعني آرايه‌اي كه 10 عضو دارد بزرگترين انديس خانه‌هايش 9 مي‌باشد. دسترسي به عناصر هر يك از ابعاد آرايه با انديس امكان پذير است
توجه داشته باشيد كه انديس دهي آرايه از صفر آغاز مي‌شود و بعنوان مثال intArray[12] به خانه شماره 12 آرايه اشاره مي‌كند اما فراموش نكنيد چون انديس آرايه از صفر آغاز مي‌شود خانه شماره 12 آرايه، سيزدهمين داده شما را در خود جاي مي‌دهد.
 
12
11
10
9
8
7
6
5
4
3
2
1
0

اگر شكل فوق را آرايه‌اي تك بعدي تصور نماييد، مشاهده مي‌نماييد كه خانه شماره 5 آرايه حاوي اطلاعات مربوط به ششمين داده ورودي شما مي‌باشد.


مثال زیر اولین عنصر آرایه را با 20 مقدار دهی میکند.

TestArray[0] = 20;

مقداردهی اولیه به عناصر آرایه در هنگام تعریف

مانند مقال زیر عمل میکنیم :

int[] intialize = new int[] {1,2,3,4,5 };

آرایه فوق یک آرایه 5 عنصری با مقادیر 1 تا 5 خواهد بود.

آرایه های چندبعدی (ماتریسها)

این آرایه ها بر دو نوع هستند :


آرایه های مستطیلی یا Rectangular که در آنها تعدا ستونهای تمام سطرها با هم برابر است


آرایه های دندانه دار یا jagged که تعداد ستونهای سطرها می تواند با یکدیگر برابر نباشد.

آرایه های مستطیلی

این آرایه ها اینگونه تعریف می شوند :

int[,] RectArray = new int[2, 5];

این آرایه شبیه شکل زیر خواهد بود :

         
         

مثال فوق یک آرایه دو بعدی که دارای 2 سطر و 5 ستون است را تعریف می نماید.
مثال زیر یک آرایه 4 بعدی را تعریف می نماید :

int[,,,] RectArrayfour = new int[2,5,1,2];

دسترسی به عناصر آرایه چند بعدی

این کار شبیه به آرایه های تک بعدی است. معمولاً به بعد اول آرايه سطر و به بعد دوم آن ستون مي‌گويد. مثلاً monthArray[3,7] عنصر واقع در سطر 3 و ستون 7 آرايه را مشخص مي‌نمايد.


در مثال زیر به عنصر سطر 1 و ستون 1 آرایه مقدار 10 را انتساب داده ایم.

RectArray[1, 1] = 10;

مقداردهی اولیه به عناصر آرایه در هنگام تعریف

این کار شبیه به آرایه های تک بعدی است با این تفاوت که هر سطر را در یک { } قرار میدهیم.

int[,] arr5 = new int [,] { {1,2,3}, {4,5,6} };

در مثال فوق یِک آرایه دوبعدی داریم که دو سطر و 3 ستون دارد.

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

آرايه‌هاي دندانه‌دار (Jagged Arrays) که در زبان ‍C# وجود دارند در صرفه‌جويي حافظه بسيار موثر ميباسند. يك آرايه دندانه‌دار، در حقيقت يك آرايه تك بعدي است كه هر يك از اعضاي آن خود يك آرايه تك بعدي مي‌باشند. اندازه اين عناصر مي‌تواند متفاوت باشد و تفاوت اين آرايه‌ها با‌ آرايه‌هاي چند بعدي در همين جا نمايان مي‌شود. استفاده از اين آرايه‌ها در مواردي كاربرد دارد كه نيازي نيست تا تمامي ابعاد آرايه داراي تعداد عناصر مساوي باشند.


در مثال زیر ، آرایه دندانه داری تعریف نموده ایم که 5 سطر دارد و هر سطر آن می تواند یک آرایه تک بعدی باشد. دقت کنید که نباید در هنگام تعریف تعداد ستونها را مشخص کنیم .

int[][] jagged = new int[5][];

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

jagged[0] = new int[3];
jagged[1] = new int[2];
jagged[2] = new int[5];
jagged[3] = new int[1];
jagged[4] = new int[6];

آرایه فوق شکلی چنین خواهد داشت :
 
بعنوان مثال فرض كنيد مي‌خواهيد آرايه‌اي جهت نگهداري تعداد روزهاي ماههاي مختلف سال تهيه كنيد. در صورتيكه بخواهيد از آرايه چند بعدي استفاده نماييد، چون تعداد روزهاي تمامي ماههاي سال يكسان نيست، مجبوريد تا تعداد عناصر تمام بعدهاي آرايه را برابر با بزرگترين تعداد روز ماهها، يعني 31، تعريف نماييد. ولي چون تنها 6 ماه داراي 31 روز مي‌باشند، براي 6 ماه ديگر تعدادي از عناصر آرايه هيچگاه مورد استفاده قرار نمي‌گيرند و حافظه را به هدر داده‌ايم. اما در صورتيكه براي اين مثال از آرايه‌هاي دندانه‌دار استفاده نماييم، مي‌توانيم يك آرايه دندانه‌دار 12 عنصري تعريف نماييم و سپس تعداد عناصر هر يك از اعضاي آنرا برابر با تعداد روزهاي ماه مورد نظر تعريف كنيم :
با استفاده از آرايه چند بعدي :
int[ , ] monthArray = new int[12,31];

با استفاده از آرايه دندانه‌دار :

int[][] monthArray = new int[12][];

در تعريف اول كه در آن از آرايه چند بعدي استفاده كرديم، مشاهده مي‌كنيد كه آرايه‌اي دو بعدي تعريف كرده‌ايم كه بعد اول آن 12 عضو و بعد دوم آن 31 عضو دارد. اين عمل دقيقاً همانند ايجاد يك جدول براي نگهداري روزهاي ماههاي سال است.


اما در حالت دوم كه در آن از آرايه دندانه‌دار بهره برده‌ايم، يك آرايه تعريف نموده‌ايم كه بعد اول آن 12 عضو دارد ولي بعد دوم آنرا را تعريف نكرده‌ايم كه داراي چند عضو است و هر يك از عناصر بعد اول آرايه مي‌تواند داراي تعداد اعضاي متفاوتي باشد كه با استفاده از اين روش مي‌توان به هر يك از ماههاي سال تعداد روزهاي مورد نظر آن ماه را تخصيص داد و فضايي بلا استفاده ايجاد نخواهيم كرد. توجه نماييد كه چون تعداد عناصر بعد ديگر اين آرايه معين نشده است در برنامه بايد اين تعداد عنصر را مشخص نماييم:

monthArray[1] = new int[31];
monthArray[10] = new int [30];

مشاهده مي‌كنيد كه به هر ماه، تعدا عنصر مورد نياز خود را تخصيص داده‌ايم. تنها بايد به تفاوت اعلان آرايه‌هاي دندانه‌دار با آرايه‌هاي چند بعدي توجه نماييد.

چهارشنبه 10 آذر 1389  11:11 PM
تشکرات از این پست
دسترسی سریع به انجمن ها