از کلاس ArrayList برای ذخیره سازی مجموعه ای از عناصر میتوان استفاده کرد. از مزیت های استفاده از ArrayList به جای آرایه ها ، این است که میتوان داده هایی با نوع های مختلف را در آن ذخیره سازی کرد. در این فصل با ArrayList در سی شارپ آشنا خواهیم شد.
ArrayList
کلاس ArrayList یک کالکشن از نوع non-generic
در سی شارپ است که می تواند شامل هر نوع داده ای باشد. هنگامی که مقداری را به این کالکشن اضافه می کنیم اندازه آن به صورت خودکار افزایش می یابد و بر خلاف آرایه ها در زمان تعریف نیاز به مشخص کردن اندازه ی آن ندارید. اعلان یک ArrayList به شکل زیر است :
ArrayList myArryList = new ArrayList();
صفات و متد های مهم ArrayList
-
Capacity
: تعداد آیتم هایی که ArrayList می تواند در خود نگه دارد را مشخص میکند. -
Count
: تعداد عناصری که در ArrayList قرار گرفتهاند را مشخص میکند. -
()Add
: با استفاده از متد Add میتوان یک مقدار را به انتهای ArrayList افزود. -
()AddRange
: با استفاده از متد AddRange می توان مجموعه ای از مقادیر را به ArrayList افزود. -
()Insert
: با استفاده از متد Insert میتوان یک مقدار را در مکان مشخصی از ArrayList درج کرد. -
()InsertRange
: با استفاده از متد InsertRange می توان مجموعه ای از عناصر را در یک مکان مشخص به بعد در ArrayList درج کرد. -
()RemoveAt
: با استفاده از متد Remove میتوان عنصری خاص را در مکانی مشخص از آرایه حذف کرد. -
()Remove
: با استفاده از متد Remove میتوان عنصری را از ArrayList حذف کرد. -
()RemoveRange
: با استفاده از متد RemoveRange میتوان مجموعه ای از عناصر را از ArrayList حذف کرد. -
()Sort
: با استفاده از متد Sort میتوان عناصر موجود در جایگزین را مرتب سازی کرد. -
()Reverse
: با استفاده از متد Reverse میتوان ترتیب قرار گرفتن مقادیر در ArrayList را عکس کرد. -
()Contains
: بررسی می کند که عنصر مورد نظر در ArrayList وجود دارد یا نه. در صورتی که وجود داشته باشد مقدار true و در غیر این صورت مقدار false را برمیگرداند.
افزودن عنصر به ArrayList
از متد ()Add
برای افزودن یک عنصر و از متد ()AddRange
برای افزودن چندین عنصر به یک ArrayList استفاده کنید. در این جا منظور از عنصر ، هر نوع داده ای است که در کالکشن قرار میگیرد. مثالی از افزودن عناصر به یک ArrayList :
ArrayList arryList1 = new ArrayList();
arryList1.Add(1);
arryList1.Add("Two");
arryList1.Add(3);
arryList1.Add(4.5);
ArrayList arryList2 = new ArrayList();
arryList2.Add(100);
arryList2.Add(200);
//adding entire arryList2 into arryList1
arryList1.AddRange(arryList2);
همانطور که در مثال بالا مشاهده می شود می توان عناصر را با انواع مختلف در یک ArrayList اضافه کرد.
در مثال بالا همچنین arrayList۲ با استفاده از متد AddRange
به arrayList۱ افزوده شده است.
شما همچنین می توانید در زمان تعریف یک ArrayList مقادیر اولیه را به آن انتساب دهید :
ArrayList arrayList = new ArrayList() { 100, "Two", 12.5, 200 };
دسترسی به عناصر ArrayList
برای دسترسی به عناصر یک ArrayList ، همانند آرایه ها باید از مقادیر index استفاده کرد. با این حال در هنگام واکشی مقادیر باید از تبدیل صریح (casting) برای تبدیل به نوع موردنظر استفاده کنید. یک راه دیگر استفاده از کلمه کلیدی var است.
ArrayList myArryList = new ArrayList();
myArryList.Add(1);
myArryList.Add("Two");
myArryList.Add(3);
myArryList.Add(4.5f);
//Access individual item using indexer
int firstElement = (int) myArryList[0]; //returns 1
string secondElement = (string) myArryList[1]; //returns "Two"
int thirdElement = (int) myArryList[2]; //returns 3
float fourthElement = (float) myArryList[3]; //returns 4.5
//use var keyword
var firstElement = myArryList[0]; //returns 1
از حلقه foreach یا for میتوان برای پیمایش در طول آرایه ها استفاده نمود :
ArrayList myArryList = new ArrayList();
myArryList.Add(1);
myArryList.Add("Two");
myArryList.Add(3);
myArryList.Add(4.5);
foreach (var val in myArryList) Console.WriteLine(val); //Or
for(int i = 0 ; i< myArryList.Count; i++) Console.WriteLine(myArryList[i]);
خروجی نمونه مثال بالا به شکل زیر است :
1 Two 3 4.5
درج عناصر در یک ArrayList
ArrayList myArryList = new ArrayList();
myArryList.Add(1);
myArryList.Add("Two");
myArryList.Add(3);
myArryList.Add(4.5);
myArryList.Insert(1, "Second Item");
myArryList.Insert(2, 100);
foreach (var val in myArryList) Console.WriteLine(val);
خروجی مثال بالا به شکل زیر خواهد بود :
1 Second Item 100 Two 3
4.5
از متد ()InsertRange
برای اضافه کردن مجموعه ای از مقادیر در یک مکان مشخص از ArrayList استفاده کنید :
ArrayList arryList1 = new ArrayList();
arryList1.Add(100);
arryList1.Add(200);
ArrayList arryList2 = new ArrayList();
arryList2.Add(10);
arryList2.Add(20);
arryList2.Add(30);
arryList2.InsertRange(2, arryList1);
foreach(var item in arryList2) Console.WriteLine(item);
Output:
خروجی به شکل زیر خواهد بود :
10 20 100 200 30
حذف عناصر از ArrayList
از متد جایگزین برای حذف عنصری مشخص از ArrayList استفاده کنید :
ArrayList arryList1 = new ArrayList();
arryList1.Add(100);
arryList1.Add(200);
arryList1.Add(300);
arryList1.Remove(100); //Removes 1 from ArrayList
foreach (var item in arryList1) Console.WriteLine(item);
خروجی مثال بالا به شکل زیر است :
200 300
از متد ()RemoveAt
برای حذف یک عنصر از یک مکان مشخص از ArrayList استفاده کنید :
ArrayList arryList1 = new ArrayList();
arryList1.Add(100);
arryList1.Add(200);
arryList1.Add(300);
arryList1.RemoveAt(1); //Removes the first element from an ArrayList
foreach (var item in arryList1) Console.WriteLine(item);
خروجی نمونه به سال بالا به شکل زیر است :
100 300
از متد ()RemoveRange
برای حذف مجموعه ای از عناصر که از مکان index آغاز میشوند استفاده کنید :
ArrayList arryList1 = new ArrayList();
arryList1.Add(100);
arryList1.Add(200);
arryList1.Add(300);
arryList1.RemoveRange(0,2);//Removes two elements starting from 1st item (0 index)
foreach(var item in arryList1) Console.WriteLine(item);
خروجی مثال بالا به شکل زیر است :
300
مرتب سازی جایگزین
کالکشن ArrayList شامل متد ()Sort
و ()Reverse
است. با استفاده از تابع Sort می توان عناصر را در ArrayList به شکل صعودی مرتب سازی کرد. با این حال تمام عناصری که در ArrayList قرار دارند باید از یک نوع باشند تا بتوان عملیات مقایسه را روی آنها انجام داد.
با استفاده از متد ()Reverse
می توان ترتیب عناصر موجود در آرایه ها را عکس کرد. در این صورت آخرین عنصر در ArrayList در مکان اول قرار میگیرد :
ArrayList arryList1 = new ArrayList();
arryList1.Add(300);
arryList1.Add(200);
arryList1.Add(100);
arryList1.Add(500);
arryList1.Add(400);
Console.WriteLine("Original Order:");
foreach(var item in arryList1) Console.WriteLine(item);
arryList1.Reverse();
Console.WriteLine("Reverse Order:");
foreach(var item in arryList1) Console.WriteLine(item);
arryList1.Sort();
Console.WriteLine("Ascending Order:");
foreach(var item in arryList1) Console.WriteLine(item);
خروجی مثال بالا به شکل زیر است :
Original Order: 300 200 100 500 400 Reverse Order: 400 500 100 200 300 Ascending Order: 100 200 300 400 500
بررسی وجود عناصر در ArrayList
با استفاده از متد ()Contains
میتوان بررسی کرد عنصری خاص در ArrayList وجود دارد و یا خیر. این متد در صورتیکه عنصر مورد نظر وجود داشته باشد مقدار true
و در غیر این صورت مقدار false
را برمیگرداند :
ArrayList myArryList = new ArrayList();
myArryList.Add(100);
myArryList.Add("Hello World");
myArryList.Add(300);
Console.WriteLine(myArryList.Contains(100));
خروجی نمونه مثال بالا به شکل زیر است :
true