آموزش کامل آرایه ها در سی شارپ

آرایه ها

آرایه ها در سی شارپ ساختار داده های قدرتمندی برای حل بسیاری از مشکلات برنامه نویسی هستند. شما دیده اید که در طی ساخت متغیر هایی از هر نوع یک چیز بین آن ها مشترک است, آنها اطلاعات یک شئ مجزا را در خود نگه میدارند به عنوان مثال یک عدد صحیح , اعشاری , نوع رشته وغیره. پس راه حل اینکه اگر احتیاج داشته باشید که سری های اشیا را دستکاری کنید چیست ؟ یکی از راه حل ها ساخت یک متغیر به ازای هر شئ سری میباشد اما دوباره این به مشکل دیگری منجر میشود. چه تعداد متغیر احتیاج دارید ؟ پس در این موقعیت آرایه ها مکانیزمی ارائه میکنند که راه حلی برای سوال های بالا مطرح میکنند. آرایه یک مجموعه ای از اشیای به هم مرتبط است یا از نظر ارزش یا نوع منابع. در C# آرایه ها تغییر ناپذیر میباشند همانطور که تعداد ابعاد و سایز آرایه ها ثابت هستند.مرور آرایه ها

آرایه شامل صفر یا تعداد بیشتر شئ میباشد که به آنها عناصر می گویند. آرایه یک توالی بی نهایت از عناصر است. تمام عناصر درون یک آرایه از یک نوع مشابه هستند ( بجز فیلد های یک کلاس که میتواند از نوع مختلف باشد.) عناصر آرایه با استفاده از یک شاخص عدد صحیح که همیشه از صفر شروع میشود , قابل دسترسی هستند. C# از آرایه های تک بعدی (بردار ها) , چند بعدی و آرایه های دندانه دار پشتیبانی میکند.
عناصر با شاخص های مرتبط با ابتدای آرایه شناسایی میشوند. یک شاخص (index) که به طور معمول (indices) یا امضا نیز نامیده میشود در داخل indexing operator ([]) قرار دارند. دسترسی به عناصر آرایه توسط شاخص ارزش آنها که محدوده ی آن از صفر تا (طول- ۱) است , میباشد.

خصوصیات آرایه

طول آرایه پس از ساخت نمیتواند تغییر کند.
عناصر با ارزش های پیش فرض مقداردهی اولیه میشوند.
آرایه ها از نوع منابع هستند و مثالی از System.Array میباشند.
تعداد ابعاد یا رتبه های آن میتواند توسط خصوصیات رتبه تعیین شود.
طول یک آرایه میتواند توسط متد GetLength() یا خصوصیت طول تعیین شود.

مثال های آرایه ی ساده

در مثال زیر در خط دهم یک متغیر آرایه از نوع عدد صحیح بنام myArrays با طول پنج مشخص میکنیم. که به این معناست که متغیر myArrays میتواند پنج عنصر عدد صحیح در خود نگه دارد. از خط پانزده ما به هر عنصر با استفاده از حلقه ی for دسترسی پیدا میکنیم و حتی محاسباتی بر روی آنها اجرا میکنیم. در نهایت در خط بیست و یک ما هر یک از عناصر را نمایش میدهیم.

using System;   
namespace Arrays   
{   
class Program   
{   
static void Main(string[] args)   
{   
// Integer type array with length 5( range 0 to 4)   
int[] myArrays = new int[5];   
Console.WriteLine("Simple Array Example");   
// Arrays inititalization   
for (int i = 0; i < myArrays.Length; i++)   
{   
// Even number manipulation   
myArrays[i] = i * 2;    
// print array   
Console.WriteLine(myArrays[i]);     
}   
Console.ReadKey();     
}   
}   
}

زمانی که ما این برنامه را کامپایل کردیم ۵ عدد را بر روی صفحه نمایش میدهد. زیرا ما پیکربندی متغیر آرایه را طوری قرار داده ایم که تنها پنج عنصر را همانند زیر در خود نگه دارد:

آرایه در سی شارپ

شکل ۱.۱ -خروجی ساده ی آرایه

اعلام یک آرایه

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

آرایه در سی شارپ

شکل ۱.۲ – اعلام آرایه

شکل قبل سینتکس اعلام آرایه و تخصیص حافظه برای یک آرایه ی تک بعدی با نوع و طول مشخص را نشان میدهد. اعلام با نوع عناصر آرایه آغاز میشود. عناصر یک آرایه میتوانند از نوع ارزش یا نوع منبع باشند. عنصر با یک سری از براکت های خالی آورده میشود. آرایه های تک بعدی از یک سری براکت استفاده میکند. نوع عنصر به اضافه ی براکت ها یک نوع آرایه را میدهد. این نوع آرایه همراه با یک شناساگر که نام آرایه را مشخص میکند میاید

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

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

int[] myArrays = new int[3];

خط کد زیر به سادگی آرایه ای از اعداد اعشاری را اعلام میکند.

float[] myArrays;

و این کد حافظه را برای نگه داشتن شش عدد اعشازی تخصیص میدهد.

myArrays=new float[6] ;

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

String[] arry = new String[8];

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

int[] arry = new int[5] { 15, 3, 7, 8, 9 };

مثال یافتن نوع , رتبه و کل عناصر در یک نوع آرایه

مثال زیر طول , نوع و رتبه ی یک آرایه ی از نوع عدد صحیح را محاسبه میکند.

using System;   
namespace Arrays   
{   
class Program   
{   
static void Main(string[] args)   
{   
// Integer type array with length 5( range 0 to 4)   
int[] arry = new int[5];   
Console.WriteLine("Type=" + arry.GetType());   
Console.WriteLine("Rank=" + arry.Rank);   
Console.WriteLine("Length=" + arry.Length);   
Console.ReadKey();     
}   
}   
}

آرایه برداری با استفاده از ارزش های تحت اللفظی

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

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

طول یک آرایه توسط تعداد ارزش های تحت اللفظی که در اعلام معرفی شده اند , تعیین میشود.

string[] arry = {"A", "J", "A", "Y"};   
bool[] arry = {true, false}; 

مثال الحاق دو رشته

مثال زیر الحاق دو کلمه را نشان میدهد :

using System;   
namespace Arrays   
{   
class Program   
{   
static void Main(string[] args)   
{   
// string type array with length 2( range 0 to 1)   
string[] arry = {"Barack" , "Obama"};   
//string concatenation   
Console.WriteLine(arry[0] + " " + arry[1] );   
Console.ReadKey();     
}   
}   
}

مثال یافتن بزرگترین عدد در محدوده ای از اعداد صحیح

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

using System;   
namespace Arrays   
{   
class Program   
{   
static void Main(string[] args)   
{   
// Integer type array    
int[] arry = {5,3,7,8,9};   
int x=0;   
for (int i = 0; i < arry.Length; i++)   
{   
if (x > arry[i])   
{   
continue;   
}   
else   
{   
x = arry[i];   
}   
}   
Console.WriteLine("Largest Number=" + x);   
Console.ReadKey();     
}   
}   
}  

نوع منبع

نوع منبع یک آرایه میتواند توسط ساخت یک کلاس رسمی اجرا شود. متغیری از نوع منبع شامل داده هایش به طور مستقیم نخواهد بود. هرچند شما نمیتوانید ارزش منبع را خودتان تغییر دهید. بگذارید با یک کلاس رسمی با دو سازنده شروع کنیم. خصوصیات FirstName و LastName و یک Override از متد ToString() برای الحاق دو کلمه. در کلاس اصلی ما آرایه ای از اشیای کلاس رسمی با طول دو را میسازیم و در نهایت چاپ FirstName و LastName از طریق تکرار حلقه ی foreach همانند زیر :

using System;   
namespace Arrays   
{   
public class Customer   
{   
public Customer() { }   
public Customer(string fname,string lname)   
{   
this.fname = fname;   
this.lname = lname;   
}   
private string fname;   
private string lname;   
public string FirstName   
{   
get { return fname; }   
set { fname = value; }   
}   
public string LastName   
{   
get { return lname; }   
set { lname = value; }   
}   
public override string ToString()   
{   
return fname + " " + lname;   
}   
}   
class Program   
{   
static void Main(string[] args)   
{   
Customer[] obj = new Customer[2];   
obj[0] = new Customer("ajay","yadav");   
obj[1] = new Customer("tom","hanks");   
foreach(Customer i in obj)   
{   
Console.WriteLine(i.ToString());   
}   
Console.ReadKey();   
}   
}   
}

کنترل استثنا در آرایه

گاهی اوقات ما ناخواسته مشکلاتی در ارتباط با کد به محدوده ی شاخص آرایه میسازیم. به عنوان مثال در برنامه ی زیر جمع پنج عدد را جمع میکنیم. پس در خط پنجم در حلقه ی for ما یک علامت مساوی در شزط قرار میدهیم. در این زمینه حلقه شش بار به جای پنج بار اجرا میشود ; در نهایت این از محدوده ی خطا شاخص تولید میکند.

با این حال به دلیل اجتناب از چنین اشکالات برنامه نویسی , ما کد قابل توجهی را در بلوک تلاش قرار میدهیم و با استفاده از بلوک دریافت یک پیام هشدار برای شاخص دور از دسترس چشمک میزنیم.

آرایه در سی شارپ

آرایه های چند بعدی

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

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

// ۲D integer type array   
int[,] dArray = new int[2,2];   
dArray[0, 0] = 1;   
dArray[0, 1] = 2;   
dArray[1, 0] = 3;   
dArray[1, 1] = 4;

یک آرایه دو بعدی میتواند یک توری یا ماتریس شامل سطر و ستون ها در نظر گرفته شود. جدول زیر یک آرایه ی ۲*۲ بعدی با ارزش های مربوط به سطر و ستون هایش همانند زیر است :

آرایه در سی شارپ

شما همچنین میتوانید با استفاده از شاخصه ی آرایه , آرایه دو بعدی را مقداردهی اولیه نمایید اگر که شما ارزش های عناصر پیش را میدانید همانن زیر :

// ۲D integer type array   
int[,] dArray ={   
{۱,۲,۳},   
{۴,۵,۶}   
}; 

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

using System;   
namespace Arrays   
{   
class Program   
{   
static void Main(string[] args)   
{   
Console.WriteLine("Enter the Rank::");   
int row = Int32.Parse(Console.ReadLine());   
int cols = Int32.Parse(Console.ReadLine());   
Console.WriteLine("__________________________");   
int[,] doubleArray = new int[row, cols];   
for (int i = 0, j = 1; i < doubleArray.GetLength(0); i++)   
{   
for (int k = 0; k < doubleArray.GetLength(1); k++)   
{   
doubleArray[i, k] = j++;   
Console.Write("{0:D3} ", doubleArray[i, k]);   
}   
Console.WriteLine();   
}   
Console.WriteLine();   
Console.WriteLine("Rank=" + doubleArray.Rank);   
Console.WriteLine("Elements=" + doubleArray.Length);   
Console.ReadKey();   
}   
}   
}

زمانی که شما این برنامه را کامپایل میکنید از شما میخواهد که  بعد (مرتبه) آرایه را وارد نمایید و سپس ارزش ها را به فرم ماتریس همانند زیر نمایش میدهد :

آرایه در سی شارپ

شکل ۱.۳ – آرایه ی دو بعدی

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

using System;   
namespace Arrays   
{   
class Program   
{   
static void Main(string[] args)   
{   
char[,] doubleArray = {   
{'A','B','C'},   
{'D','E','F'},   
{'G','H','I'}   
};   
for (int i = 0; i < doubleArray.GetLength(0); i++)   
{   
for (int k = 0; k < doubleArray.GetLength(1); k++)   
{   
Console.Write(doubleArray[i, k] + " ");   
}   
Console.WriteLine();   
}   
Console.WriteLine();   
Console.WriteLine("Rank=" + doubleArray.Rank);   
Console.WriteLine("Elements=" + doubleArray.Length);   
Console.ReadKey();   
}   
}   
} 

خروجی برنامه ی قبل به صورت زیر خواهد بود :

آرایه در سی شارپ

شکل ۱.۴ – آرایه دو بعدی تحت اللفظی

  • پسورد: www.mspsoft.com
داریوش فرخی

داریوش فرخی هستم از سال 92 شروع به یادگیری برنامه نویسی و از سال 93 در بخش برنامه نویسی و تولید محتوای سایت mspsoft.com مشغول هستم. فعالیتم نیز بیشتر در زمینه های برنامه نویسی با سی شارپ و asp.net بوده است. اوقات فراغتم را هم غالبا با تماشای فیلم یا بازی های کامپیوتری پر میکنم .

نوشته‌های مرتبط

دیدگاه‌ها

*
*

این سایت از اکیسمت برای کاهش هرزنامه استفاده می کند. بیاموزید که چگونه اطلاعات دیدگاه های شما پردازش می‌شوند.

    yasi پاسخ

    سلام میبخشید چه طوری میشه ارایه 10 عضوی را در برنامه نویسی تحت ویتدوز در #c خوند

    علی پاسخ

    با سلام.من میخوام 4 گیگ حافظه در سی شارپ شبیه سازی کنم و 2 گیگش رو بطور تصادفی مقدار بدم میشه کمکم کنید.خیلی ممنون میشم

    مریم پاسخ

    آیا میتوان چندین عکس را با آرایه درون دیتابیس وارد کرد؟

      مسعود شریفی پاسخ

      بله بهتر است که آدرس تصاویر را ذخیره کنید.

    مریم پاسخ

    پیشنهاد شما برای وارد کردن چندین عکس درون دیتابیس چیست؟

      مسعود شریفی پاسخ

      آدرس تصاویر را ذخیره کنید.

    sajjad پاسخ

    برنامه بنویسید که نام 10 نفر را گرفته و در ارایه ذخیره کند و از کاربر نام یکی را بگیرد اگر در ارایه بود پیغام خوشامدی و اگر نبود با پیغام بوغ

    amir پاسخ

    سلام ببخشید یه سوال داشتم چجوری میتونم ارایه رو از کاربر دریافت کتنم و ارایه رو به ترتیب حروف الفبا مرتب کنم با تشکر

    Mitra پاسخ

    سلام...میخواستم بدونم امکان ترکیب کردن محتوای دو ارایه باهم هست؟
    یا چه جوری میشه اریه a و اریه bبه صورت منظم باهم در ارایه c قرار بگیرند؟
    ممنون از سایت خوبتون❤❤

    ناشناس پاسخ

    سلام
    عذر خواهی میکنم من میخوام پیشفرض اندیس های ارایه از صفر شروع نشهچیکار باید بکنم؟

    #c پاسخ

    خیلی حال کردم و عالی بود .آموزش باید همراه‌با مثال های صحیح و کاربردی باشه که آموزش شما دارای این نقطه قوت هم بود .ممنون

    عشقم m پاسخ

    سلام خوبین میخوام یه برنامه بهتون بدم بلدش نیستم اگه میشه برام بنویسیدش.
    برنامه ای بنویسید که نام دانش اموزان به همراه نمره درس توسعه انهارا دریافت ودر ارایه ذخیره کند.
    سپس میانگین کلاس درس و توسعه و برنامه نویسی را چاپ کند.
    نام دانش اموز را دریافت کند و بگویید نمره درس ان چند شده است.
    نام دانش اموزان را به همراه نمره درس انها بصورت زیبا چاپ کن.
    لطفا اگه میشه بهم جوابشا بهم بدین.

    عشقم m پاسخ

    میشه بهم بدین اون برنامه نویسا لطفا

    سیامک پاسخ

    سلام . آرایه دندانه دار در محیط ویندوز فرم چگونه تعریف می شه ؟