منظور از آرایه در سی شارپ چیست

آرایه در سی شارپ
مفهوم آرایه در سی شارپ و بهطورکلی برنامهنویسی، زمانی به میان میآید که نیاز به ذخیره دستهای و مرتب اطلاعات در غالب متغیر داریم. تخصیص مقادیر به صورت تکی به متغیرها وقتگیر بوده و در بعضی پروژههای بزرگ غیرممکن است. اینجا است که مفهوم آرایه بهمیان میآید.

آرایه خانههای حافظه را بهترتیب در اختیار دادههای شما قرار میدهد و کار ذخیره اطلاعات را سادهتر میکند. در این مطلب علاوه بر بررسی تعریف آرایه در سی شارپ قصد داریم نگاهی عمقیتر به این مفهوم داشته باشیم. انواع آرایه، کلاس های کمکی آرایه و مفاهیمی مثل ArrayList در این مقاله مورد بررسی قرار میگیرند. با ما همراه باشید.
زمانی که متغیرها کافی نیستند
اولین چیزی که معمولا در برنامهنویسی آموزش داده میشود، مقداردهی به متغیرها است. برنامههای ساده و تمرینی اکثرا با مقداردهی به یک متغیر (مثل X) شروع میشوند.
اما هرچه جلوتر بروید و وارد دنیای برنامهنویسی شوید، نیاز به ذخیره و کار با اطلاعات به صورت دستهای را بیشتر حس میکنید. اینجاست که متغیرها دیگر جوابگو نیستند و اگر هم باشند، وقت زیادی را از شما خواهند گرفت. در چنین شرایطی مفهوم آرایه در زبانهای مختلف برنامهنویسی مطرح میشود که در این مقاله تمرکز ما بر تعریف آرایه در#C خواهد بود.
تعریف آرایه در سی شارپ
آرایه مجموعهای از متغیرهای همنوع است که با یک نام مشترک شناخته میشوند. بهعبارتدیگر میتوان گفت آرایه یک متغیر با چندین مقدار است. برای تعریف آرایه در سیشارپ عبارات مختلفی وجود دارد اما مهمتر از همه، فهمیدن مفهوم و کاربرد آن در برنامهنویسی است. آرایه با دستور کلی زیر تعریف میشود:
type[] arrayName;
که در آن type نوع دادههای آرایه را مشخص میکند (int، double یا…) و در قسمت arrayName نام منتخب برنامهنویس قرار میگیرد. آرایه میتواند یک بعدی، چند بعدی یا ناهموار باشد.
آرایه چند بعدی
اگر بخواهیم یک جدول یا ماتریس را ذخیره کنیم نیازمند آرایه دو بعدی خواهیم بود. زمانی که یک پارامتر سوم به جدول اضافه شود از آرایه سهبعدی استفاده میکنیم. این روند تا n بعد میتواند ادامه پیدا کند. برای تعریف آرایه چندبعدی اینگونه عمل میکنیم:
دوبعدی
int[,] array = new int[4, 2];
سه بعدی
int[, ,] array1 = new int[4, 2, 3];
آرایه ناهموار
آرایه ناهموار در واقع آرایهای از آرایهها است. آرایههایی که در آرایه ناهموار قرار میگیرند سایز ثابتی ندارند. برنامهنویس در زمان نوشتن کد تنها تعداد ردیفها را وارد میکند و جای تعداد ستونها را خالی میگذارد. اگر تعداد ستونها هم مقداردهی شود دیگر آرایه ناهموار نخواهد بود و آرایهای معمولی از تعدادی آرایه با اندازه مشخص است. تفاوت اصلی آرایه ناهموار در همین سایز متغیر است. شکل کلی دستور تعریف آرایه ناهموار اینگونه است:
data_type[][] name_of_array = new data_type[rows];
برای مثال:
int[][] jagged_arr = new int[4][];
مقداردهی آرایه
مقدار دهی در آرایه میتواند به صورت دستی یا اتوماتیک صورت بگیرد. دستور مقدار دهی در سی شارپ به صورت دستی به شکل زیر است (مثال برای یک آرایه دو بعدی):
array[0, 0] = value;
array[0, 1] = value;
array[0, 2] = value;
این مقداردهی میتواند به صورت اتوماتیک هم انجام شود. مثلا هر زمان مشتری مقدار جدیدی را در بخش هزینه وارد کرد، این مقدار در آرایه قرار داده شود یا نتایج به دست آمده در هر بار اجرای حلقه روی یک آرایه ذخیره شوند.
نکات مهم آرایه ها در سی شارپ
- تخصیص فضا برای آرایهها در سیشارپ به صورت پویا است.
- آرایهها در #C به صورت شی شناخته میشوند. برای فهمیدن اندازه آنها از اندازه اعضای آنها استفاده میشود و نیاز نیست مثل C یا ++C از عملگری مثل sizeof استفاده کنیم.
- دستوراتی که برای تعریف متغیر در #C بهکار میروند برای آرایه نیز استفاده میشوند. تنها تفاوت در [] بعد از نام متغیر است.
- آرایهها نظم و ترتیب مشخصی دارند و شمارهگذاری آنها از صفر شروع میشود.
- آرایه #C یک شی از Array است.
- مقدار پیشفرض در خانههای آرایه صفر یا null است.
- المانهای آرایه ناهموار از نوع رفرنس بوده و بهصورت پیشفرض هیچ (null) هستند.
- المانهای آرایه میتوانند از هر نوعی باشند.
- المانهای آرایه میتوانند خود آرایه باشند.
- دادههای ذخیره شده در آرایه در خانههایی مجاور در حافظه به ترتیب ذخیره میشوند.
مثالی از کار با آرایه های مختلف
در این بخش قصد داریم اعلام، مقداردهی و نمایش آرایه تکبعدی، چندبعدی و ناهموار را در سیشارپ نشان دهیم:
تک بعدی:
در این مثال آرایهای برای روزهای هفته اعلام کرده و سپس با روزهای هفته آن را مقداردهی مینماییم. در نهایت از طریق حلقه آرایه را طی کرده و المانها را به خروجی میبریم:
using System;
namespace Maktabkhooneh {
class MKTBK {
// Main Method
public static void Main()
{
// declares a 1D Array of string.
string[] weekDays;
// allocating memory for days.
weekDays = new string[] {"Sun", "Mon", "Tue", "Wed",
"Thu", "Fri", "Sat"};
// Displaying Elements of array
foreach(string day in weekDays)
Console.Write(day + " ");
}
}
}
چند بعدی:
using System;
namespace Maktabkhooneh {
class MKTBK {
// Main Method
public static void Main()
{
// Two-dimensional array
int[, ] intarray = new int[, ] { { 1, 2 },
{ 3, 4 },
{ 5, 6 },
{ 7, 8 } };
// The same array with dimensions
// specified 4 row and 2 column.
int[, ] intarray_d = new int[4, 2] { { 1, 2 }, { 3, 4 },
{ 5, 6 }, { 7, 8 } };
// A similar array with string elements.
string[, ] str = new string[4, 2] { { "one", "two" },
{ "three", "four" },
{ "five", "six" },
{ "seven", "eight" } };
// Three-dimensional array.
int[,, ] intarray3D = new int[,, ] { { { 1, 2, 3 },
{ 4, 5, 6 } },
{ { 7, 8, 9 },
{ 10, 11, 12 } } };
// The same array with dimensions
// specified 2, 2 and 3.
int[,, ] intarray3Dd = new int[2, 2, 3] { { { 1, 2, 3 },
{ 4, 5, 6 } },
{ { 7, 8, 9 },
{ 10, 11, 12 } } };
// Accessing array elements.
Console.WriteLine("2DArray[0][0] : " + intarray[0, 0]);
Console.WriteLine("2DArray[0][1] : " + intarray[0, 1]);
Console.WriteLine("2DArray[1][1] : " + intarray[1, 1]);
Console.WriteLine("2DArray[2][0] " + intarray[2, 0]);
Console.WriteLine("2DArray[1][1] (other) : "
+ intarray_d[1, 1]);
Console.WriteLine("2DArray[1][0] (other)"
+ intarray_d[1, 0]);
Console.WriteLine("3DArray[1][0][1] : "
+ intarray3D[1, 0, 1]);
Console.WriteLine("3DArray[1][1][2] : "
+ intarray3D[1, 1, 2]);
Console.WriteLine("3DArray[0][1][1] (other): "
+ intarray3Dd[0, 1, 1]);
Console.WriteLine("3DArray[1][0][2] (other): "
+ intarray3Dd[1, 0, 2]);
// using nested loop show string elements
Console.WriteLine("To String element");
for (int i = 0; i < 4; i++)
for (int j = 0; j < 2; j++)
Console.Write(str[i, j] + " ");
}
}
}
در خروجی خواهیم داشت:
ناهموار:
using System;
namespace Maktabkhooneh {
class MKTBK {
// Main Method
public static void Main()
{
/*----------2D Array---------------*/
// Declare the array of two elements:
int[][] arr = new int[2][];
// Initialize the elements:
arr[0] = new int[5] { 1, 3, 5, 7, 9 };
arr[1] = new int[4] { 2, 4, 6, 8 };
// Another way of Declare and
// Initialize of elements
int[][] arr1 = { new int[] { 1, 3, 5, 7, 9 },
new int[] { 2, 4, 6, 8 } };
// Display the array elements:
for (int i = 0; i < arr.Length; i++)
{
System.Console.Write("Element [" + i + "] Array: ");
for (int j = 0; j < arr[i].Length; j++)
Console.Write(arr[i][j] + " ");
Console.WriteLine();
}
Console.WriteLine("Another Array");
// Display the another array elements:
for (int i = 0; i < arr1.Length; i++)
{
System.Console.Write("Element [" + i + "] Array: ");
for (int j = 0; j < arr1[i].Length; j++)
Console.Write(arr1[i][j] + " ");
Console.WriteLine();
}
}
}
}
و در خروجی این کد خواهیم داشت:
کلاس آرایه
این کلاس متدهایی برای ساخت آرایه، دستکاری اطلاعات درون آرایه، جستجو و مرتبسازی آرایه در دسترس برنامهنویس قرار میدهد. این کلاس همچنین اساس لازم برای اجرا شدن برنامههای نوشته شده با آرایه را فراهم میکند.
public abstract class Array : ICloneable, System.Collections.IList, System.Collections.IStructuralComparable, System.Collections.IstructuralEquatable
کلاس های کمکی برای آرایه ها در سی شارپ دو دستهاند:
کلاس های مربوط به مشخصات
این کلاسها به شما کمک میکنند مشخصات و ویژگیهای مختلف آرایه را پیدا کنید:
توضیح | نام |
مقداری که برمیگرداند نشان میدهد سایز آرایه ثابت است یا متغیر |
IsFixedSize |
آیا آرایه فقط برای خواندن است یا قابلیت ویرایش دارد؟ |
IsReadOnly |
آیا آرایه همگامسازی شده است؟ |
IsSynchronized |
تعداد مجموع المانهای حاضر در آرایه را برمیگرداند |
Length |
همان کاربری Length را برای آرایههای چندبعدی دارد |
LongLength |
تعداد ابعاد آرایه را برمیگرداند |
Rank |
یک شی را که میتوان از طریق آن به آرایه دسترسی پیدا کرد مییابد |
SyncRoot |
متدهای آرایه
اینها به شما کمک میکند عملیاتی (مثل جستجو یا کپی) را با آرایه انجام دهید.
توضیح | نام |
جستجوی طیفی از المان ها در آرایه تک بعدی |
BinarySearch (Array, Int32, Int32, Object) |
جستجوی یک المان خاص در آرایه |
BinarySearch(Array,Object) |
بازگرداندن طیفی از المانها به مقدار پیشفرض |
Clear(Array,Int32,Int32) |
یک کپی سطحی از آرایه میسازد |
Clone() |
المانهای یک آرایه را با دادن شماره ایندکس به یک آرایه دیگر کپی میکند |
Copy(Array,Array,Int32) |
تمام المانهای آرایه مبدا را به آرایه مقصد منتقل میکند |
CopyTo(Array,Int32) |
با یک تایپ و طول مشخص، آرایهای تک بعدی میسازد |
CreateInstance(Type,Int32) |
یک آرایه خالی برمیگرداند |
Empty<T>() |
خالی کردن منابع و پاک کردن عملگرها را انجام میدهد |
Finalize() |
جستجوی یک المان با مشخصات دقیق |
Find<T>(T[],Predicate<T>) |
جستجوی یک آرایه برای شی و نقطه شروعش در آرایه |
IndexOf(Array,Object) |
مقداردهی اولیه آرایههای value-type با فراخوانی تابع سازنده value type |
Initialize() |
مرتب کردن المانهای آرایه یک بعدی |
Sort(Array) |
ترتیب المانها را برعکس میکند |
Reverse(Array) |
یک رشته به نمایندگی از شی فعلی میسازد |
ToString() |
مفهوم ArrayList
یکی از قابلیتهای جالب توجه سی شارپ، ارائه کلاس ArrayList است. لیست آرایه بهعنوان جایگزین آرایه مطرح میشود. با استفاده از ArrayList نیاز به تعریف یک نوع خاص از داده در ابتدا ندارید. ساختار این کلاس از لحاظ نوع و اندازه محدودیتی ندارد. در واقع ظرفیت ArrayList شناور بوده و با توجه به دیتاهای جدید تعیین می شود. دستور تعریف ArrayList به صورت زیر است:
ArrayList myArryList = new ArrayList();
همانطور که میبینید در تعریف این کلاس نیاز به تعیین نوع داده یا طول و عرض آرایه نداریم. رهایی از محدودیتهای آرایه دلیلی است که بعضی از برنامهنویسان ArrayList را انتخاب میکنند.
ArrayList Vs. Array
گفتیم که گاهی اوقات ArrayList بهعنوان جایگزین آرایه انتخاب میشود. در این قسمت میخواهیم ببینیم چه تفاوتهایی بین این دو وجود دارد. شما باید با مطالعه دقیق ویژگیهای هر دو، در زمان نیاز، مناسبترین گزینه را برای پروژه خود انتخاب کنید.
ArrayList |
Array |
امکان ذخیره چند نوع فایل روی یک ArrayList | حساس به ثابت بودن نوع تمام المان ها |
ظرفیت پویا (تا دوبرابر ظرفیت اولیه افزایش پیدا میکند) | ظرفیت ثابت |
استفاده از تعداد زیادی ArrayList باعث پایین آمدن سرعت عملکرد خواهد شد | روی عملکرد کلی تاثیر منفی نمیگذارد |
به فضای اسمی System.collection تعلق دارد | به فضای اسمی System تعلق دارد |
امکان پذیرش هیچ (Null) را دارد | امکان پذیرش هیچ (Null) را ندارد |
کلام آخر
در این مقاله سعی کردیم تعریف آرایه در سی شارپ را به شکلی عمقیتر از همیشه بررسی کنیم. معمولا مقالات در این زمینه تمرکز خود را روی برنامهنویسی میگذارند. در این مقاله تعریف آرایه در #C را به همراه مفاهیم مرتبط با آن بررسی کردیم. آرایهها کار ذخیرهسازی اطلاعات را برای برنامهنویسان سادهتر میکنند.
از آرایه در ذخیره اطلاعات دستهای، جداول، ماتریسها و… استفاده میشود. آرایه میتواند n بعد داشته باشد یا ناهموار باشد. آرایه ناهموار طولی شناور دارد. ArrayList جایگزین آرایه است که علاوه بر شناور بودن در اندازه، در نوع دادهها نیز شناور است. در پایان نظر یا تجربیات مرتبط خود با مطلب آرایه در سی شارپ را از طریق کامنت با ما به اشتراک بگذارید.