برنامه نویسی و IT

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

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

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

 

ویدیو پییشنهادی : آموزش C# مقدماتی
آموزش C# مقدماتی

 

آرایه خانه‌های حافظه را به‌ترتیب در اختیار داده‌های شما قرار می‌دهد و کار ذخیره اطلاعات را ساده‌تر می‌کند. در این مطلب علاوه بر بررسی تعریف آرایه در سی شارپ قصد داریم نگاهی عمقی‌تر به این مفهوم داشته باشیم. انواع آرایه، کلاس های کمکی آرایه و مفاهیمی مثل 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

آرایه و array list

 

گفتیم که گاهی اوقات ArrayList به‌عنوان جایگزین آرایه انتخاب می‌شود. در این قسمت می‌خواهیم ببینیم چه تفاوت‌هایی بین این دو وجود دارد. شما باید با مطالعه دقیق ویژگی‌های هر دو، در زمان نیاز، مناسب‌ترین گزینه را برای پروژه خود انتخاب کنید.

 

ArrayList

Array

امکان ذخیره چند نوع فایل روی یک ArrayList حساس به ثابت بودن نوع تمام المان ها
ظرفیت پویا (تا دوبرابر ظرفیت اولیه افزایش پیدا می‌کند) ظرفیت ثابت
استفاده از تعداد زیادی ArrayList باعث پایین آمدن سرعت عملکرد خواهد شد روی عملکرد کلی تاثیر منفی نمی‌گذارد
به فضای اسمی System.collection تعلق دارد به فضای اسمی System تعلق دارد
امکان پذیرش هیچ (Null) را دارد امکان پذیرش هیچ (Null) را ندارد

کلام آخر

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

 

مقاله پییشنهادی : نحوه تعریف کلاس در سی شارپ
نحوه تعریف کلاس در سی شارپ

 

از آرایه در ذخیره اطلاعات دسته‌ای، جداول، ماتریس‌ها و… استفاده می‌شود. آرایه می‌تواند n بعد داشته باشد یا ناهموار باشد. آرایه ناهموار طولی شناور دارد. ArrayList جایگزین آرایه است که علاوه بر شناور بودن در اندازه، در نوع داده‌ها نیز شناور است. در پایان نظر یا تجربیات مرتبط خود با مطلب آرایه در سی شارپ را از طریق کامنت با ما به اشتراک بگذارید.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا