کار با آرایه‌ها در C#
1398/02/22 14:49 , میلاد صاحب نظر

کار با آرایه‌ها در C#

در این مطلب به صورت کامل و همراه با مثال کار با آرایه‌ها در C# را خواهید آموخت. کلاس آرایه در C#، متدها و propertyهایی فراهم می‌کند تا بتوانیم با آرایه‌ها در C# کار کنیم.

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

آرایه در C# چیست؟

در C#، اندیس یا index یک آرایه از صفر شروع می‌شود. این بدان معنا است که اولین آیتم یک آرایه از موقعیت ۰ آغاز می‌شود. موقعیت آخرین آیتم در یک آرایه برابر است با تعداد کل آیتم‌ها منهای ۱. بنابراین اگر یک آرایه دارای ۱۰ آیتم باشد، دهمین آیتم در موقعیت نهم قرار دارد.

در C#، می‌توان آرایه‌ها را با طول ثابت یا متغیر (پویا) تعریف کرد.

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

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

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

;Int[] intArray

همان‌طور که در قطعه کد بالا مشاهده می‌کنید، تعریف یک آرایه با نوع آرایه شروع می‌شود، بعد از آن دو کروشه باز و بسته قرار می‌گیرند ([]) و در انتها نام آرایه مشخص می‌شود.

قطعه کد زیر آرایه‌ای را تعریف می‌کند که فقط می‌تواند ۵ آیتم را ذخیره کند. پس اندیس یا index آن از ۰ تا ۴ است.

int[] intArray;  
intArray = new int[5];  

کد زیر آرایه‌ای را تعریف می‌کند که می‌تواند ۱۰۰ آیتم را ذخیره کند و اندیس آن از ۰ تا ۹۹ است.

int[] intArray;  
intArray = new int[100];  

تعریف آرایه‌ها با نوع‌های مختلف

در قطعه کد قبلی، نحوه تعریف یک آرایه ساده از نوع integer را مشاهده کردید. به طور مشابه، می‌توانیم آرایه‌ها را با نوع‌های مختلف (مانند double، character و String) تعریف کنیم.

در C#، آرایه‌ها در واقع شیء هستند. این بدان معنا است که تعریف یک آرایه در واقع یک آرایه ایجاد نمی‌کند. بعد از تعریف یک آرایه، باید آرایه را با استفاده از عملگر new مقداردهی کنید.

قطعه کد زیر آرایه‌هایی از نوع‌های bool، char، double و string ایجاد می‌کند.

double[] doubleArray = new double[5];  
char[] charArray = new char[5];  
bool[] boolArray = new bool[2];  
string[] stringArray = new string[10];  

مقداردهی به آرایه

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

قطعه کد زیر آرایه‌ای از ۳ آیتم ایجاد می‌کند و مقادیر این آیتم‌ها در زمان مقداردهی، به آن افزوده شده‌اند.

// یک آرایه ثابت را مقداردهی می‌کند  
int[] staticIntArray = new int[3] {1, 3, 5};  

یا در عوض، می‌توانید آیتم‌های آرایه را یکی‌یکی مقداردهی کنیم که در کد زیر مشاهده می‌کنید.

// یک آرایه ثابت را به صورت تک‌تک مقداردهی می‌کند  
int[] staticIntArray = new int[3];  
staticIntArray[0] = 1;  
staticIntArray[1] = 3;  
staticIntArray[2] = 5;   

کد زیر یک آرایه پویا با مقادیر string تعریف می‌کند.

// یک آرایه پویا را در هنگام تعریف مقداردهی می‌کند  
string[] strArray = new string[] { "Mahesh Chand", "Mike Gold", "Raj Beniwal", "Praveen Kumar", "Dinesh Beniwal" }; 

دسترسی به آرایه

می‌توانیم با اشاره به اندیس یا index آیتم در آرایه، به آیتم موجود در آرایه دسترسی یابیم. کد زیر یک آرایه از ۳ آیتم ایجاد می‌کند و آن آیتم‌ها را در کنسول نمایش می‌دهد.

// یک آرایه ثابت را به صورت تک‌تک مقداردهی می‌کند 
int[] staticIntArray = new int[3];  
staticIntArray[0] = 1;  
staticIntArray[1] = 3;  
staticIntArray[2] = 5;  
// آیتم‌های آرایه را یک به یک می‌خواند  
Console.WriteLine(staticIntArray[0]);  
Console.WriteLine(staticIntArray[1]);  
Console.WriteLine(staticIntArray[2]);   

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

دسترسی به آرایه با استفاده از حلقه foreach

عبارت کنترلی (حلقه) foreach برای تکرار آیتم‌های یک آرایه به کار می‌رود. برای مثال، کد زیر از حلقه foreach برای خواندن تمام آیتم‌های موجود در یک آرایه از نوع string استفاده می‌کند.

// آیتم‌های یک آرایه پویا را در هنگام تعریف مقداردهی می‌کند  
string[] strArray = new string[] {  
    "Mahesh Chand",  
    "Mike Gold",  
    "Raj Beniwal",  
    "Praveen Kumar",  
    "Dinesh Beniwal"  
};  
// می‌خواند Foreach آیتم‌های آرایه را با استفاده از حلقه
foreach(string str in strArray) {  
    Console.WriteLine(str);  
}  

این روش زمانی استفاده می‌شود که شما دقیقاً نمی‌دانید آیتم مورد نظرتان در چه اندیسی از آرایه قرار دارد و باید به صورت حلقه‌ای تمام آیتم‌ها را بررسی کنید.

نوع‌های آرایه

آرایه‌ها به چهار دسته زیر تقسیم می‌شوند:

  • آرایه‌های تک بعدی
  • آرایه‌های چند بعدی یا آرایه‌های مستطیلی
  • آرایه‌های دندانه‌دار یا Jagged
  • آرایه‌های ترکیبی

آرایه‌های تک بعدی

آرایه‌های تک بعدی ساده‌ترین نوع آرایه‌ها هستند. این آرایه‌ها برای ذخیره عدد آیتم‌هایی که از یک نوع خاص هستند، استفاده می‌شوند. همه آیتم‌ها در یک آرایه تک بعدی به صورت پیوسته از ۰ تا سایز آرایه منهای ۱ ذخیره می‌شوند.

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

int[] intArray;  
intArray = new int[3]; 

تعریف‌های آرایه در C# خیلی ساده هستند. آیتم‌های آرایه در بین آکولاد ({}) قرار می‌گیرند. اگر یک آرایه مقداردهی نشود، آیتم‌های آن به صورت خودکار با مقادیر اولیه پیش‌فرض مخصوص آن نوع آرایه مقداردهی می‌شوند.

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

کد زیر یک آرایه از نوع integer تعریف می‌کند که می‌تواند ۳ آیتم ذخیره کند و آن‌ها را مقداردهی کند.

int[] staticIntArray = new int[3] {1, 3, 5};  

کد زیر یک آرایه String با ظرفیت ذخیره ۵ آیتم را تعریف  مقداردهی می‌کند.

string[] strArray = new string[5] { "Mahesh", "Mike", "Raj", "Praveen", "Dinesh" };  

حتی می‌توانید بدون استفاده از عملگر new، مستقیماً این مقادیر را به آرایه اختصاص دهید.

string[] strArray = { "Mahesh", "Mike", "Raj", "Praveen", "Dinesh" };  

همچنین می‌توانید یک آرایه با طول پویا را به شکل زیر مقداردهی کنید:

string[] strArray = new string[] { "Mahesh", "Mike", "Raj", "Praveen", "Dinesh" };   

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

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

تعریف یک آرایه چند بعدی

یک آرایه چند بعدی به شکل زیر تعریف می‌شود:

;String[,] multiDimStringArray

یک آرایه چند بعدی می‌تواند دارای سایز ثابت یا متغیر (پویا) باشد.

مقداردهی آرایه‌های چند بعدی

قطعه کد زیر مثالی از آرایه‌های چند بعدی با سایز ثابت است که دو آرایه چند بعدی با یک ماتریس 3×2 و 2×2 را تعریف می‌کند. اولین آرایه می‌تواند ۶ آیتم را ذخیره کند و دومین آرایه ۴ آیتم را ذخیره می‌کند. هر دوی این آرایه‌ها در هنگام تعریف مقداردهی می‌شوند.

int[,] numbers = new int[3, 2] { { 1, 2 }, { 3, 4 }, { 5, 6 } };  
string[,] names = new string[2, 2] { { "Rosy", "Amy" }, { "Peter", "Albert" } }; 

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

int[,] numbers = new int[,] { { 1, 2 }, { 3, 4 }, { 5, 6 } };  
string[,] names = new string[,] { { "Rosy", "Amy" }, { "Peter", "Albert" } }; 

همچنین می‌توانید عملگر new را حذف کنید (همان‌طور که برای آرایه‌های تک بعدی نیز انجام شد). می‌توانید این مقادیر را مستقیماً و بدون استفاده از عملگر new به آرایه اختصاص دهید. برای مثال:

int[, ] numbers = {  
    {  
        1,  
        2  
    },  
    {  
        3,  
        4  
    },  
    {  
        5,  
        6  
    }  
};  
string[, ] names = {  
    {  
        "Rosy",  
        "Amy"  
    },  
    {  
        "Peter",  
        "Albert"  
    }  
};   

همچنین می‌توانیم آیتم‌های آرایه را یکی‌یکی مقداردهی کنیم. قطعه کد زیر مثالی از مقداردهی آیتم‌های آرایه به صورت تک‌تک است:

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

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

آیتم‌های یک آرایه چند بعدی به شکل ماتریس ذخیره می‌شوند و برای دسترسی به آن‌ آیتم‌ها، باید بعد ماتریس را تشخیص دهیم. برای مثال، آیتم (1,2) نشان دهنده یک آیتم از آرایه موجود در دومین ردیف و سومین ستون از ماتریس است.

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

Console.WriteLine(numbers[0, 0]);  
Console.WriteLine(numbers[0, 1]);  
Console.WriteLine(numbers[1, 0]);  
Console.WriteLine(numbers[1, 1]);  
Console.WriteLine(numbers[2, 0]);  
Console.WriteLine(numbers[2, 2]);   

آرایه‌های دندانه‌دار (Jagged Arrays)

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

تعریف آرایه‌های دندانه‌دار

تعریف یک آرایه دندانه‌دار شامل دو جفت کروشه است. برای مثال، کد زیر آرایه دندانه‌داری را تعریف می‌کند که دارای سه آیتم از یک آرایه است.

;[][Int [][] int JaggedArray = new int[3

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

;[][String[][] stringJaggedArray = new string [2

مقداردهی به آرایه‌های دندانه‌دار

قبل از اینکه بتوانیم از یک آرایه دندانه‌دار استفاده کنیم، آیتم‌های آن باید مقداردهی شوند. کد زیر یک آرایه دندانه‌دار را مقداردهی می‌کند.

اولین آیتم با آرایه‌ای از integerها که دارای دو integer است، دومین آیتم با آرایه‌ای از integerها که دارای چهار integer است و سومین آیتم با آرایه‌ای از integerها که دارای شش integer است مقدار دهی شده‌اند.

// مقداردهی آرایه‌های دندانه‌دار  
intJaggedArray[0] = new int[2];  
intJaggedArray[1] = new int[4];  
intJaggedArray[2] = new int[6];  

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

// مقداردهی آرایه‌های دندانه‌دار  
intJaggedArray[0] = new int[2] {  
    2,  
    12  
};  
intJaggedArray[1] = new int[4] {  
    4,  
    14,  
    24,  
    34  
};  
intJaggedArray[2] = new int[6] {  
    6,  
    16,  
    26,  
    36,  
    46,  
    56  
};   

دسترسی به آرایه‌‌های دندانه‌دار

با استفاده از روش زیر، می‌توانیم به صورت انفرادی و تکی به آیتم‌های یک آرایه دندانه‌دار دسترسی یابیم:

Console.Write(intJaggedArray3[0][0]);  
Console.WriteLine(intJaggedArray3[2][5]); 

همچنین می‌توانیم با حلقه تمام آیتم‌های یک آرایه دندانه‌دار را بررسی کنیم. Property یا ویژگی Length از یک آرایه کمک خیلی زیادی به ما می‌کند.

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

// حلقه ای برای طی کردن تمام آیتم‌های آرایه دندانه‌دار  
for (int i = 0; i < intJaggedArray3.Length; i++) {  
    System.Console.Write("Element({0}): ", i);  
    for (int j = 0; j < intJaggedArray3[i].Length; j++) {  
        System.Console.Write("{0}{1}", intJaggedArray3[i][j], j == (intJaggedArray3[i].Length - 1) ? "" : " ");  
    }  
    System.Console.WriteLine();  
}   

آرایه‌های ترکیبی

آرایه‌های ترکیبی، ترکیبی از آرایه‌های چند بعدی و دندانه‌دار هستند. نوع آرایه‌های ترکیبی از NET 4.0. به بعد حذف شده است. در واقع دیگر استفاده چندانی از آرایه‌های ترکیبی مشاهده نخواهید کرد. می‌توانید با بهره‌گیری از آرایه‌های چند بعدی و دندانه‌دار هر کاری انجام دهید.

یک مثال ساده

در لیست ۱ مثال کاملی قرار دارد که چگونگی تعریف همه انواع آرایه‌ها را نمایش می‌دهد و سپس آن‌ها را مقداردهی کرده و به آن‌ها دسترسی می‌یابد.

برای تست این کد، در ویژوال استودیو یک پروژه console application ایجاد کرده و کدهای موجود در این لیست را در آن‌ پروژه کپی کنید.

Console.WriteLine("Single Dimension Array Sample");  
// آرایه تک بعدی  
string[] strArray = new string[] {  
    "Mahesh Chand",  
    "Mike Gold",  
    "Raj Beniwal",  
    "Praveen Kumar",  
    "Dinesh Beniwal"  
};  
//  foreach خواندن آیتم‌های آرایه با استفاده از حلقه
foreach(string str in strArray) {  
    Console.WriteLine(str);  
}  
Console.WriteLine("-----------------------------");  
Console.WriteLine("Multi-Dimension Array Sample");  
string[, ] string2DArray = new string[2, 2] {  
    {  
        "Rosy",  
        "Amy"  
    }, {  
        "Peter",  
        "Albert"  
    }  
};  
foreach(string str in string2DArray) {  
    Console.WriteLine(str);  
}  
Console.WriteLine("-----------------------------");  
Console.WriteLine("Jagged Array Sample");  
int[][] intJaggedArray3 = {  
    new int[] {  
        2,  
        12  
    },  
    new int[] {  
        14,  
        14,  
        24,  
        34  
    },  
    new int[] {  
        6,  
        16,  
        26,  
        36,  
        46,  
        56  
    }  
};  
// حلقه‌ای برای طی کردن تمام آیتم‌های آرایه دندانه‌دار  
for (int i = 0; i < intJaggedArray3.Length; i++) {  
    Console.Write($"Element({i}): ");  
    for (int j = 0; j < intJaggedArray3[i].Length; j++) {  
        Console.Write($"{intJaggedArray3[i][j]} ");  
    }  
    Console.WriteLine();  
}  
Console.WriteLine("-----------------------------");   

لیست۱

خروجی لیست ۱ در تصویر ۱ نمایش داده شده است.

خروجی لیست ۱

تصویر ۱

کلاس آرایه

کلاس آرایه مادر تمام آرایه‌ها است و امکان ایجاد، دست‌کاری، جستجو و مرتب‌سازی آرایه‌ها در NET Framework. را فراهم می‌کند.

کلاس Array که در System namespace تعریف می‌شود، کلاس پایه برای آرایه‌ها در C# است. کلاس آرایه یک کلاس پایه چکیده است که بیان می‌کند ما نمی‌توانیم یک نمونه یا instance از کلاس Array ایجاد کنیم.

ایجاد یک Array

کلاس Array متد CreateInstace را برای ساخت یک آرایه فراهم می‌کند. متد CreateInstance اولین پارامتر را به عنوان نوع آیتم‌ها در نظر گرفته و دومین و سومین آیتم ابعاد و بازه آرایه هستند. وقتی یک آرایه ایجاد شد، از متد SetValue برای افزودن آیتم‌ها ره یک آرایه استفاده می‌کنیم.

کد زیر یک آرایه ایجاد می‌کند و سه آیتم به آن اضافه می‌کند. همان‌طور که مشاهده می‌کنید، نوع آیتم‌های آرایه string است و بازه آن ۳ است. اگر سعی کنید آیتم چهارم را به آرایه اضافه کنید برنامه ارور می‌دهد.

Array stringArray = Array.CreateInstance(typeof(String), 3);  
stringArray.SetValue("Mahesh Chand", 0);  
stringArray.SetValue("Raj Kumar", 1);  
stringArray.SetValue("Neel Beniwal", 2);   

نکته: فراخوانی SetValue برای یک آیتم موجود در یک آرایه، مقدار قبلی آیتم را با مقدار جدید بازنویسی می‌کند.

قطعه کد موجود در لیست ۲ یک آرایه چند بعدی ایجاد می‌کند.

Array intArray3D = Array.CreateInstance(typeof(Int32), 2, 3, 4);  
for (int i = intArray3D.GetLowerBound(0); i <= intArray3D.GetUpperBound(0); i++)  
    for (int j = intArray3D.GetLowerBound(1); j <= intArray3D.GetUpperBound(1); j++)  
        for (int k = intArray3D.GetLowerBound(2); k <= intArray3D.GetUpperBound(2); k++) {  
            intArray3D.SetValue((i * 100) + (j * 10) + k, i, j, k);  
        }  
foreach(int ival in intArray3D) {  
    Console.WriteLine(ival);  
}   

لیست ۲

ویژگی‌ها یا propertyهای Array

جدول ۱ ویژگی‌های کلاس Array را توصیف می‌کند.

IsFixedSize مقداری را بازمی‌گرداند که مشخص می‌کند آیا آرایه ثابت است یا خیر.
IsReadOnly مقداری را بازمی‌گرداند که مشخص می‌کند آیا آرایه قابلیت فقط خواندنی دارد یا خیر.
LongLength  یک عدد ۶۴ بیتی بازمی‌گرداند که نشان دهنده کل تعداد آیتم‌ها در تمام بعد‌های یک آرایه است.
Length یک عدد ۳۲ بیتی بازمی‌گرداند که نشان دهنده کل تعداد آیتم‌ها در تمام بعد‌های یک آرایه است.
Rank تعداد بعدهای یک آرایه را بازمی‌گرداند

جدول ۱

قطعه کد موجود در لیست ۳ یک آرایه ایجاد می‌کند و از ویژگی‌های Array برای نمایش مقادیر ویژگی استفاده می‌کند.

int[] intArray = new int[3] {    
    0,    
    1,    
    2    
};    
if (intArray.IsFixedSize) {    
    Console.WriteLine("Array is fixed size");    
    Console.WriteLine($"Size : {intArray.Length.ToString()}");  
    Console.WriteLine($"Rank : {intArray.Rank.ToString()}");  
} 

لیست ۳

خروجی لیست ۳ در تصویر ۲ نمایش داده شده است.

خروجی لیست ۳

تصویر ۲

جستجو برای یک آیتم در Array

می‌توان برای جستجوی یک آیتم در آرایه از متد استاتیک جستجوی دودویی در کلاس Array استفاده کرد. این متد از الگوریتم جستجوی دودویی برای جستجوی یک آیتم استفاده می‌کند. این متد حداقل دو پارامتر می‌گیرد.

اولین پارامتر آرایه‌ای است که در آن می‌خواهید جستجو کنید و دومین پارامتر یک شیء است که در واقع همان آیتمی است که به دنبال آن هستید. اگر یک آیتم در آرایه یافت شود، آنگاه متد اندیس یا index آن آیتم را بازمی‌گرداند (بر این اساس که اندیس اولین آیتم ۰ است).

در غیر این صورت، متد یک مقدار منفی بازمی‌گرداند.

نکته

قبل از اینکه در آرایه جستجو کنید، باید آن را مرتب کنید. به کامنت‌های موجود در این مقاله توجه کنید.

لیست ۴ از متد جستجوی دودویی (BinarySearch) برای جستجوی یک string در یک آرایه استفاده می‌کند.

// یک آرایه ایجاد می‌کند و ۵ آیتم به آن اضافه می‌کند    
Array stringArray = Array.CreateInstance(typeof(String), 5);  
stringArray.SetValue("Mahesh", 0);  
stringArray.SetValue("Raj", 1);  
stringArray.SetValue("Neel", 2);  
stringArray.SetValue("Beniwal", 3);  
stringArray.SetValue("Chand", 4);  
// یک آیتم را می‌یابد    
object name = "Neel";  
int nameIndex = Array.BinarySearch(stringArray, name);  
if (nameIndex >= 0) Console.WriteLine($"Item was at {nameIndex.ToString()}th position");  
else Console.WriteLine("Item not found"); 

لیست ۴

مرتب‌سازی آیتم‌ها در یک آرایه

برای مرتب‌سازی آیتم‌های آرایه از متد استاتیک Sort از کلاس Array استفاده می‌شود. این متد دارای اشکال متفاوت زیادی می‌باشد.

ساده‌ترین نوع آن، آرایه‌ای که می‌خواهید مرتب کنید را به عنوان یک پارامتر دریافت می‌کند. لیست ۵ از متد Sort برای مرتب‌سازی آیتم‌های آرایه استفاده می‌کند. با استفاده از متد Sort، می‌توانید همچنین بخشی از لیست آیتم‌ها را نیز مرتب‌سازی کنید.

// یک آرایه ایجاد می‌کند و ۵ آیتم به آن اضافه می‌کند    
Array stringArray = Array.CreateInstance(typeof(String), 5);  
stringArray.SetValue("Mahesh", 0);  
stringArray.SetValue("Raj", 1);  
stringArray.SetValue("Neel", 2);  
stringArray.SetValue("Beniwal", 3);  
stringArray.SetValue("Chand", 4);  
// یک آیتم را می‌یابد   
object name = "Neel";  
int nameIndex = Array.BinarySearch(stringArray, name);  
if (nameIndex >= 0) Console.WriteLine($"Item was at {nameIndex.ToString()}th position");  
else Console.WriteLine("Item not found");  
Console.WriteLine();  
Console.WriteLine("Original Array");  
Console.WriteLine("---------------------");  
foreach (string str in stringArray)  
{  
    Console.WriteLine(str);  
}  
Console.WriteLine();  
Console.WriteLine("Sorted Array");  
Console.WriteLine("---------------------");  
Array.Sort(stringArray);  
foreach (string str in stringArray)  
{  
    Console.WriteLine(str);  
} 

لیست ۵

خروجی لیست ۵ در تصویر ۳ نمایش داده شده است.

خروجی لیست ۵

تصویر ۳

یا در عوض، متد Sort می‌تواند index آغازین و تعداد آیتم‌ها را بگیرد. کد زیر ۳ آیتم را مرتب‌سازی می‌کند که از موقعیت دوم آرایه آغاز می‌شوند.

Array.Sort(stringArray, 2, 3);   

خروجی جدید در تصویر ۴ نمایش داده شده است.

خروجی لیست ۵

تصویر ۴

گرفتن و تنظیم مقادیر

متدهای GetValue و SetValue از کلاس Array برای گرفتن و تنظیم مقادیر آیتم‌های یک آرایه استفاده می‌شوند. کدهای موجود در لیست ۶ با استفاده از متد CreateInstance یک نمونه از آرایه ۲ بعدی ایجاد می‌کنند.

بعد از آن از متد SetValue برای افزودن مقادیر به آرایه استفاده شده است.

در آخر، تعداد آیتم‌ها در هر دو بعد یافته و از متد GetValue برای خواندن مقادیر و نمایش آن‌ها در کنسول استفاده شده است.

Array names = Array.CreateInstance(typeof(String), 2, 4);  
names.SetValue("Rosy", 0, 0);  
names.SetValue("Amy", 0, 1);  
names.SetValue("Peter", 0, 2);  
names.SetValue("Albert", 0, 3);  
names.SetValue("Mel", 1, 0);  
names.SetValue("Mongee", 1, 1);  
names.SetValue("Luma", 1, 2);  
names.SetValue("Lara", 1, 3);  
int items1 = names.GetLength(0);  
int items2 = names.GetLength(1);  
for (int i = 0; i < items1; i++)  
    for (int j = 0; j < items2; j++)   
        Console.WriteLine($"{i.ToString()},{j.ToString()}: {names.GetValue(i, j)}"); 

لیست ۶

خروجی لیست ۶ در تصویر ۵ نمایش داده شده است.

خروجی لیست ۶

تصویر ۵

برعکس کردن (Reverse) آیتم‌های یک آرایه

متد استاتیک Reverse از کلاس Array، ترتیب آیتم‌ها در یک آرایه را برعکس می‌کند. دقیقاً مشابه متد Sort، می‌توانید یک آرایه را به عنوان یک پارامتر از متد Reverse استفاده کنید.

Array stringArray = Array.CreateInstance(typeof(String), 5);  
stringArray.SetValue("Mahesh", 0);  
stringArray.SetValue("Raj", 1);  
stringArray.SetValue("Neel", 2);  
stringArray.SetValue("Beniwal", 3);  
stringArray.SetValue("Chand", 4);  
Console.WriteLine("Original Array");  
Console.WriteLine("---------------------");  
foreach(string str in stringArray) {  
    Console.WriteLine(str);  
}  
Console.WriteLine();  
Console.WriteLine("Reversed Array");  
Console.WriteLine("---------------------");  
Array.Reverse(stringArray);  
// Array.Sort(stringArray, 2, 3);  
foreach(string str in stringArray) {  
    Console.WriteLine(str);  
}  
Console.WriteLine();  
Console.WriteLine("Double Reversed Array");  
Console.WriteLine("---------------------");  
Array.Reverse(stringArray);  
// Array.Sort(stringArray, 2, 3);  
foreach(string str in stringArray) {  
    Console.WriteLine(str);  
}   

لیست ۷

خروجی لیست ۷ در تصویر ۶ نمایش داده شده است.

خروجی لیست ۷

تصویر ۶

حذف (Clear) آیتم‌های یک آرایه

متد استاتیک Clear از کلاس Array تمام آیتم‌های یک آرایه را حذف می‌کند و طول آن را روی ۰ تنظیم می‌کند. این متد سه پارامتر می‌گیرد – اولین پارامتر یک شیء از آرایه، دومین پارامتر اندیس یا index آغازین آرایه و سومین پارامتر تعداد عنصرها است.

کد زیر دو عنصر از آرایه که از index شماره ۱ آغاز می‌شوند را حذف می‌کند (یعنی از دومین عنصر آرایه).

Array.Clear(stringArray, 1, 2);   

نکته

به خاطر داشته باشید، متد Clear آیتم‌ها را حذف نمی‌کند، فقط مقادیر آیتم‌ها را حذف می‌کند.

کدهای موجود در لیست ۸، دو آیتم از index شماره ۱ به بعد را حذف می‌کنند.

Array stringArray = Array.CreateInstance(typeof(String), 5);  
stringArray.SetValue("Mahesh", 0);  
stringArray.SetValue("Raj", 1);  
stringArray.SetValue("Neel", 2);  
stringArray.SetValue("Beniwal", 3);  
stringArray.SetValue("Chand", 4);  
Console.WriteLine("Original Array");  
Console.WriteLine("---------------------");  
foreach(string str in stringArray) {  
    Console.WriteLine(str);  
}  
Console.WriteLine();  
Console.WriteLine("Clear Items");  
Console.WriteLine("---------------------");  
Array.Clear(stringArray, 1, 2);  
foreach(string str in stringArray) {  
    Console.WriteLine(str);  
}   

لیست ۸

خروجی لیست ۸ در تصویر ۷ نمایش داده شده است. همان‌طور که در تصویر ۷ مشاهده می‌کنید، مقادیر دو آیتم از خروجی کم شده‌اند، اما خود آیتم‌ها وجود دارند.

خروجی لیست ۸

به دست آوردن سایز یک آرایه

متد GetLength تعداد آیتم‌های موجود در یک آرایه را بازمی‌گرداند. متدهای GetLowerBound و GetUpperBound کمترین و بیشترین مقادیر آرایه را باز می‌گردانند.

هر سه این متدها حداقل یک پارامتر می‌گیرند که اندیس یا index بعد (dimention) یک آرایه است. کد زیر از هر سه متد استفاده می‌کند.

Console.WriteLine(stringArray.GetLength(0).ToString());  
Console.WriteLine(stringArray.GetLowerBound(0).ToString());  
Console.WriteLine(stringArray.GetUpperBound(0).ToString()); 

کپی کردن یک آرایه

متد استاتیک Copy از کلاس Array، بخشی از آرایه را در یک آرایه دیگر کپی می‌کند. متد CopyTo همه عناصر یک آرایه را در یک آرایه تک‌بعدی دیگر کپی می‌کند. کد موجود در لیست ۹ محتوای یک آرایه integer را درون یک آرایه از نوع‌ شیء کپی می‌کند.

// را ایجاد و مقداردهی می‌کند int32 یک آرایه از نوع
Array oddArray = Array.CreateInstance(Type.GetType("System.Int32"), 5);  
oddArray.SetValue(1, 0);  
oddArray.SetValue(3, 1);  
oddArray.SetValue(5, 2);  
oddArray.SetValue(7, 3);  
oddArray.SetValue(9, 4);  
// یک آرایه از نوع شیء را ایجاد و مقداردهی می‌کند  
Array objArray = Array.CreateInstance(Type.GetType("System.Object"), 5);  
Array.Copy(oddArray, oddArray.GetLowerBound(0), objArray, objArray.GetLowerBound(0), 4);  
int items1 = objArray.GetUpperBound(0);  
for (int i = 0; i < items1; i++) Console.WriteLine(objArray.GetValue(i).ToString());   

لیست ۹

با انتقال تعداد آیتم‌ها و اندیس شروع آیتم در متد کپی، حتی می‌توانید بخشی از یک آرایه را درون یک آرایه دیگر کپی کنید.

کد زیر بازه‌ای از آیتم‌های یک آرایه که از یک اندیس منبع تعیین شده آغاز می‌شوند را کپی کرده و آن‌ها را در یک آرایه دیگر که از یک اندیس مقصد تعیین شده آغاز می‌شود، paste می‌کند.

public static void Copy(Array, int, Array, int, int);   

Clone کردن یک آرایه

متد Clone یک کپی سطحی از یک آرایه ایجاد می‌کند. منظور از کپی سطحی یک آرایه این است که فقط عناصر آرایه کپی می‌شوند، مهم نیست که نوع آن‌ها رفرنس باشد یا نوع‌های مقداری.

اما اشیائی که رفرنس به آن‌ها اشاره می‌کند را کپی نمی‌کند. رفرنس‌هایی که در آرایه جدید قرار می‌گیرند، به همان اشیائی اشاره می‌کنند که در آرایه قبلی اشاره می‌کردند.

کد زیر یک کپی Clone از یک آرایه با نوع رشته (String) ایجاد می‌کند.

string[] clonedArray = (string[])stringArray.Clone();   

خلاصه

در این مقاله، اساس و اصول آرایه‌ها و چگونگی استفاده از آن‌ها در C# را آموختید. در ابتدای مقاله، در مورد انواع مختلف آرایه‌ها (مانند تک بعدی، چند بعدی و دندانه‌دار) صحبت کردیم.

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

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

با MUG همراه باشید!

منبع: c-sharpcorner

 مطالب مرتبط

 مقدمه ای بر زبان برنامه نویسی #C و پلتفرم NET Framework.
7 دلیل منطقی برای آموختن #C
 طبقه بندی زبان های برنامه نویسی
به دست آوردن Exceptionها در #C و یافتن همه خطاها
 LINQ(زبان جستجوی یکپارچه)
برنامه نویسی شیءگرا چیست؟

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

با تکمیل فرم زیر ، از اخبار و اطلاعات به روز برنامه نویسی و تکنولوژی عقب نمانید

آخرین مطالب

آموزش جامع SQL Server (جلسه ۱۲)
آموزش جامع SQL Server (جلسه ۱۲)

دستور UPDATE در SQL Server برای تغییر داده‌های موجود در یک جدول، از دستور UPDATE به شکل زیر استفاده ...

آموزش جامع SQL Server (جلسه ۱۵)
آموزش جامع SQL Server (جلسه ۱۵)

دستور DROP TABLE در SQL Server گاهی، لازم است یک جدول که دیگر استفاده‌ای ندارد را حذف کنید. برای ...

آموزش جامع SQL Server (جلسه ۳۵: Window Functionها – بخش ۲)
آموزش جامع SQL Server (جلسه ۳۵: Window Functionها – بخش ۲)

بخش اول از آخرین مبحث دوره جامع آموزش SQL Server در جلسه قبلی بررسی شد. این مبحث که ...

آخرین دیدگاه ها

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

فرم ارسال نظرات