فصل هشتم آرایه هادر #C

<!-- /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-parent:""; margin:0cm; margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:12.0pt; font-family:"Times New Roman"; mso-fareast-font-family:"Times New Roman";} @page Section1 {size:612.0pt 792.0pt; margin:72.0pt 90.0pt 72.0pt 90.0pt; mso-header-margin:35.4pt; mso-footer-margin:35.4pt; mso-paper-source:0;} div.Section1 {page:Section1;} -->

فصل هشتم

C# آرایه هادر

آنچه که در این فصل یاد خواهید گرفت:

طرز کار با آرایه های دوبعدی و سه بعدی

و توابع ایستای آن Array • آَشنایی با نوع دادهی

foreach • نحوهی استفاده از دستور

تفاوت مابین آرایه های مستطیلی و ناهموار

است و تنها C# در بیشتر برنامه ها میخواهیم در یک لحظه با کلکسیونی از اشیاء کار کنیم. آرایه، سادهترین کلکسیون در

بصورت درونی پشتیبانی میکند. کلکسیونهای دیگر همچون پشته، صف بخشی از زبان C# نوع داده کلکسیونی است که

هستند. FCL نیستند، آنها بخشی از

در این فصل کار با سه نوع آرایه یک بعدی، چند بعدی و آرایههای ناهموار را یاد خواهید گرفت.

-1-8 کاربرد آرایه ها

گرامر اصیل را برای اعلان آرایهها فراهم میکند. برای C# . آرایه یک کلکسیون اندیس گذاری 1 شده از اشیاء هم نوع است

1). هر صندوق پستی دقیقا میتواند - تفهیم یک آرایهی یک بعدی، یک دنباله از صندوقهای پستی را تصور کنید(شکل 8

یک شی را نگه دارد. هر صندوق پستی یک شماره دارد. پس شما میتوانید تشخیص دهید یک عنصر در کدام صندوق است.

1- شکل 8

نکتهی مهم درباره آرایهها این است که میتوان با کل آرایه بصورت موجودیت واحد برخورد کرد. همانطور که خواهید دید، با

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

1 Indexed

فصل هشتم- آرایه

131

-1 اعلان آرایه

ها -1 -8

یک آرایه را به صورت زیر اعلان کنید. C #در

type[] array-name;

به عنوان مثال :

int[] myIntArray;

در واقع شما یک ارایه اعلان نکردید. شما یک متغیر اعلان کردید که ارجاع به یک آرایه از اعداد صحیح را نگه میدارد.

علامت [] به کامپایلر میگوید، شما یک آرایه اعلان میکنید و نوع داده، نوع عناصر آرایه را مشخص میکند. در مثال قبلی

ایجاد میشود. به عنوان new آرایهای از اعداد صحیح است. نمونهای از یک آرایه با استفاده از کلمه کلیدی myIntArray

مثال :

myIntArray = new int[۵];

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

آرایه است و عناصر نگه داشته شده در myIntArray. تمایز ما بین خود آرایه و عناصر نگه داشته شده در آرایه مهم است

آن 5 عدد صحیح هستند.

به آن myIntArray ایجاد میشوند. پس آرایهای که متغیر Heap انواع دادهی ارجاعی هستند که روی C# آرایه های

تخصیص داده میشود. عناصر آرایه بر اساس نوع آنها تخصیص داده میشوند. چون اعداد صحیح Heap اشاره میکند، روی

از انواع دادهی مقداری هستند، عناصر آرایه نیز انواع مقداری خواهند بود. پس همهی عناصر آرایه در داخلی بلاکی از حافظه

برای آرایه ایجاد خواهند شد. بلوک حافظه تخصیص یافته به یک آرایه از انواع داده ارجاعی، شامل ارجاعاتی به عناصر واقعی

ایجاد میشوند. Heap هستند که در قسمت مجزایی روی

-2 فهم مقادیر پیش فرض -1 -8

زمانی که یک آرایه از انواع دادهی مقداری ایجاد میکنید، هر عنصر مقدار پیش فرضی دارد که در آرایه ذخیره میشود.

دستور :

myIntArray = new int[۵];

یک آرایه از 5 عدد صحیح ایجاد میکند. هر کدام مقدار پیشفرض صفر دارند.

بر خلاف آرایهای از انواع داده مقداری، دادههای نوع ارجاعی در یک آرایه مقدار پیشفرض ندارند. در عوض، ارجاعها با

مقداردهی اولیه میشوند. اگر سعی کنید یک عنصر از آرایهای از نوع دادهی ارجاعی را قبل از مقداردهی اولیه آن null

دستیابی کنید، یک استثناء تولید خواهد شد.

را با دستور زیر اعلان کنید. Button را ایجاد کردهایم. یک آرایه از اشیاء Button فرض کنید کلاس

Button[] myButtonArray;

و آرایه واقعی را به صورت زیر تعریف کنید.

myButtonArray = new Button[٣];

میتوانید اعلان و تعریف آرایه را به طور خلاصه شدهی زیر بنویسید

Button[] myButtonArray = new Button[٣];

را با سه myButtonArray ایجاد نمیکند، بلکه آرایه Button این دستور یک آرایهی سه عنصری از ارجاعات به اشیاء

انتساب دهید. Button ایجاد میکند. برای استفاده از این آرایه باید به ازای هر عنصر در آرایه یک شی null ارجاع

C# برنامه نویسی

132

-3 دسترسی به عناصر آرایه -1 -8

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

1 اندیسگذاری Length- آرایه، تعداد اشیاء نگه داشته شده را معین میکند. بنابراین اشیاء از 0 تا Length خصوصیت

میشوند.

و آرایه اعداد صحیح را ایجاد Employees آرایهی Tester 1 مفاهیم آرایه را نشان میدهد. در این مثال، کلاس - مثال 8

میکند و سپس مقادیر هر دو را چاپ میکند.

1- مثال 8

using System;

namespace Learning_CSharp

{

// a simple class to store in the array

public class Employee

{

public Employee(int empID)

{

this.empID = empID;

}

public override string ToString( )

{

return empID.ToString( );

}

private int empID;

}

public class Tester

{

static void Main( )

{

int[] intArray;

Employee[] empArray;

intArray = new int[۵];

empArray = new Employee[٣];

// populate the arrays

for (int i = ٠;i<intArray.Length;i++)

{

intArray[i] = i*٢;

}

for (int i = ٠;i<empArray.Length;i++)

{

empArray[i] = new Employee(i+١٠٠۵);

}

// output array values

Console.WriteLine("intArray values:");

for (int i = ٠;i<intArray.Length;i++)

{

Console.WriteLine(intArray[i].ToString( ));

}

Console.WriteLine("\nemployee IDs:");

for (int i = ٠;i<empArray.Length;i++)

{

Console.WriteLine(empArray[i].ToString( ));

}

}

}

}

خروجی شبیه زیر است :

intArray values:

فصل هشتم- آرایه

133

٠

٢

۴

۶

٨

employee IDs:

١٠٠۵

١٠٠۶

١٠٠٧

آغاز میشود، که یک سازنده با پارامتری از نوع صحیح را پیادهسازی میکند. کلاس Employee این مثال با تعریف کلاس

پیادهسازی میکند. Employee شی ID را برای چاپ مقدار خصوصیت ()ToString متد Employee

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

طی میکند 1. مقدار i مقداردهی میشود. شمارندهی حلقه همه عناصر آرایه را با افزایش مقدار اندیس for یک حلقه

را با دستور زیر تنظیم کنید. intArray

intArray[i] = i*٢;

یک است و i 2 مقداردهی میشود و در مرحلهی بعدی مقدار * 0] با 0 intArray[ در اولین مرحله صفر است و i مقدار

شود، اجرا میگردد. intArray.Lenght مساوی i 2 مقداردهی میشود و ... این حلقه تا زمانی که * عنصر دوم به مقدار 1

1 است. intArray.Length- برای آخرین عنصر آرایه i توجه کنید که مقدار

به وسیلة دست ساخته شود، چون مقادیر آن از نوع داده ارجاعی هستند، هنگام ایجاد آرایه Employee باید محتوای آرایه

جدید ایجاد Employee پر میشوند. در حال حاضر باید برای هر اندیس آرایه، شی null مقداردهی اولیه نمیشوند و با

شود. در نهایت، محتوای آرایهها نشان داده میشوند، تا مطمئن شوید همانطور که قصد داشتید پر شدهاند.

foreach -2-8 دستور

بصورت زیر foreach اجازه میدهد همهی عناصر یک آرایه یا کلکسیون دیگر را طی کنید. گرامر دستور foreach دستور

است.

foreach (type identifier in expression) statement

2 نشان داده شده - مرور کنید. همانطور که در مثال 8 foreach نهایی با دستور for 1 را برای جایگزینی دو دستور - مثال 8

است، میتوانید جایگزینیها را انجام دهید.

2- مثال 8

foreach ( int i in intArray )

{

Console.WriteLine( i.ToString( ) );

}

foreach ( Employee e in empArray )

{

Console.WriteLine( e.ToString( ) );

}

خروجی یکسان خواهد بود.

1 Iterate

#C برنامه نویسی

134

-3-8 مقداردهی اولیه عناصر آرایه

یکC#. میتوانید مقداردهی اولیه محتوای یک آرایه را در زمان معرفی آن با یک لیست از مقادیر در داخل { } انجام دهید

گرامر کوتاه و بلند فراهم میکند.

int[] myIntArray = new int[۵] { ٢, ۴, ۶, ٨, بلند//;{ ١٠

int[] myIntArray = { ٢, ۴, ۶, ٨, گرامر کوتاه//;{ ١٠

بطور اتوماتیک یک آرایهی مناسب با اندازه تعداد عناصر { } ایجاد میکند. از نظر عملیاتی هر دو دستورC# ، در گرامر کوتاه

یکسان هستند. بیشتر برنامهنویسان گرامر کوتاه را بکار میبرند.

params -4-8 کلید کلیدی

اجازه میدهد یک تعداد پویا از پارامترهای هم نوع را به یک متد ارسال کنید. آنچه که متد دریافت params کلمه کلیدی

میکند، آرایهای از آن نوع داده است.

را ایجاد میکنید که یک تعداد متغیر از آرگومانهای صحیح را میگیرد. ()DisplayVals در مثال بعدی، متد

public void DisplayVals(params int[] intVals)

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

foreach (int i in intVals)

{

Console.WriteLine("DisplayVals {٠}",i);

}

فراهم DisplayVals در فراخوانی متد به ایجاد صریح آرایه نیاز ندارد. خود کامپایلر پارامترها را در یک آرایه برای متد

خواهد آورد.

t.DisplayVals(۵،۶،٧،٨);

اگر خودتان ترجیح دهید، میتوانید دادهها را از طریق یک آرایه ارسال کنید.

int [] explicitArray = new int[۵] {١،٢،٣،۴،۵};

t.DisplayVals(explicitArray);

در متد بکار برید و این آرگومان باید آخرین آرگومان متد باشد. params میتوانید فقط یک آرگومان

را ارائه میکند. params 3 کاربرد کلمهی کلیدی - مثال 8

3- مثال 8

using System;

namespace UsingParams

{

public class Tester

{

static void Main( )

{

Tester t = new Tester( );

t.DisplayVals(۵،۶،٧،٨);

int [] explicitArray = new int[] {١،٢،٣،۴،۵};

t.DisplayVals(explicitArray);

}

public void DisplayVals(params int[] intVals)

{

فصل هشتم- آرایه

135

foreach (int i in intVals)

{

Console.WriteLine("DisplayVals {٠}",i);

}

}

}

}

خروجی شبیه این است.

displayvals 5

displayvals 6

displayvals 7

displayvals 8

displayvals 1

displayvals 2

displayvals 3

displayvals 4

displayvals 5

-5-8 آرایههای چندبعدی

آرایهها میتوانند به صورت ردیفهای بلندی از شکافها باشند که میتوانند مقادیر را جا دهند. تصور کنید که 10 ردیف از

شکافها دارید که یکی بالای دیگری است. این یک آرایهی دو بعدی کلاسیک از سطرها و ستونها است. ردیفها سرتاسر

2 نشان میدهد. - آرایه را میپیمایند و ستونها آرایه را به بالا و پایین میپیمایند. همانطور که شکل 8

2- شکل 8

تصور بعد سوم سختتر است. بسیار خوب، حال 4بعدی را تصور کنید. آرایههای چندبعدی مفید هستند، حتی اگر شما

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

-1 آرایههای مستطیلی -5 -8

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

مشخص میشود. برای اعلان یک آرایه دوبعدی، گرامر زیر را به کار برید.

type [,] array-name

که شامل دو سطر و سه myRectangularArray به عنوان مثال: برای اعلان و معرفی یک آرایه مستطیلی دوبعدی به نام

ستون از اعداد صحیح است، دستور زیر را بنویسید :

int [,] myRectangularArray = new int[٢،٣];

4 آرایه دوبعدی را اعلان، تعریف و مقداردهی اولیه میکند. سپس محتوای آن را چاپ میکند. در این مثال یک - مثال 8

برای مقداردهی اولیه عناصر آرایه استفاده میشود. for حلقهی

C# برنامه نویسی

136

4- مثال 8

using System;

namespace RectangularArray

/ 4 نظر / 27 بازدید
hajar

slaam azizam [نیشخند]

حسن

تو خجالت نمی کشی مطلب مردم رو کپی کردی لااقل مثل آدم کپی کن خودت متنت رو می تونی بخونی؟ آدم کپی می کنه منبع هم می زنه بی فرهنگ

سهند

از انتشارات wrox کپی نکن. زشته[کلافه]

faeez_majidi

حداقل یه خورده تغییرات روش میدادی می گفتیم آره ![خرخون]