با استفاده از کلاس SortedList میتوان مجموعه ای از مقادیر را ذخیره سازی کرد. این کالکشن مقادیر را به صورت key و value ذخیره میکند. در این فصل با کلاس SortedList و متد های آن آشنا خواهیم شد.
SortedList
کالکشن SortedList مقادیر را به صورت key-value
ذخیرهسازی میکند. ترتیب قرار گیری مقادیر به صورت پیش فرض بر اساس key
انجام میگیرد. کلاس SortedList اینترفیس های IDictionary
و ICollection
را پیاده سازی می کند ، بنابراین عناصر آن میتوانند به وسیله مقادیر index واکشی شوند.
سی شارپ شامل دو نوع SortedList است : یکی generic و دیگری non-generic. در این فصل در مورد نسخه non-generic آن مطالبی را یاد خواهیم گرفت.
افزودن عنصر به SortedList
از متد ()Add
برای اضافه کردن مقدار به SortedList استفاده می شود. key نمی تواند null باشد ولی value می تواند null باشد. نوع داده هایی که قرار است در این کالکشن ذخیره شوند ، همگی باید از یک نوع باشند. در غیر اینصورت با خطا روبرو خواهیم شد.
مثالی از اضافه کردن مقادیر key-value به SortedList :
SortedList sortedList1 = new SortedList();
sortedList1.Add(3, "Three");
sortedList1.Add(4, "Four");
sortedList1.Add(1, "One");
sortedList1.Add(5, "Five");
sortedList1.Add(2, "Two");
SortedList sortedList2 = new SortedList();
sortedList2.Add("one", 1);
sortedList2.Add("two", 2);
sortedList2.Add("three", 3);
sortedList2.Add("four", 4);
SortedList sortedList3 = new SortedList();
sortedList3.Add(1.5, 100);
sortedList3.Add(3.5, 200);
sortedList3.Add(2.4, 300);
sortedList3.Add(2.3, null);
sortedList3.Add(1.1, null);
کالکشن SortedList در هر باری که عنصری را به آن اضافه می کنید عملیات مرتب سازی را انجام میدهد. اگر نمونه کد بالا را در محیط دیباگ ویژوال استادیو اجرا کنید خواهید دید که مرتب سازی بر اساس key
ها انجام می پذیرد :
دقت داشته باشید که sortedList۲ آیتم های key را بر اساس ترتیب حروف الفبا مرتب سازی می کند. key ها می توانند از هر نوع داده ای باشند، اما نمیتوان در یک sortedList از چندین نوع داده ای برای key ها استفاده کرد. نمونه مثال زیر به سادگی نشان می دهد که برنامه با خطا روبرو خواهد شد :
SortedList sortedList = new SortedList();
sortedList.Add(3, "Three");
sortedList.Add("Four", "Four"); // Throw exception: InvalidOperationException
sortedList.Add(1, "One");
sortedList.Add(8, "Five");
sortedList.Add(2, "Two");
دسترسی به عناصر SortedList
عناصر موجود در یک SortedList می توانند توسط مقادیر key مورد دستیابی قرار گیرند :
SortedList sortedList = new SortedList();
sortedList.Add("one", 1);
sortedList.Add("two", 2);
sortedList.Add("three", 3);
sortedList.Add("four", "Four");
int i = (int) sortedList["one"];
int j = (int) sortedList["two"];
string str = (string) sortedList["four"];
Console.WriteLine(i);
Console.WriteLine(j);
Console.WriteLine(str);
خروجی نمونه مثال بالا به شکل زیر است :
1 2 Four
نکته : در هنگام واکشی باید مقادیر واکشی شده به نوع مورد نظر تبدیل شوند (عملیات casting). همچنین می توان از کلمه ی کلیدی var هم استفاده نمود.
با استفاده از یک حلقه for
می توان عناصر یک SortedList را در خروجی چاپ کرد :
SortedList sortedList2 = new SortedList();
sortedList2.Add("one", 1);
sortedList2.Add("two", 2);
sortedList2.Add("three", 3);
sortedList2.Add("four", 4);
for (int i = 0; i < sortedList2.Count; i++)
{
Console.WriteLine("key: {0}, value: {1}",
sortedList2.GetKey(i), sortedList2.GetByIndex(i));
}
خروجی نمونه مثال بالا به شکل زیر است :
key: four, value: 4 key: one, value: 1 key: three, value: 3 key: two, value: 2
دسترسی به عناصر SortedList توسط حلقه foreach
در سی شارپ می توان از حلقه foreach
برای دستیابی به عناصر SortedList استفاده کرد :
SortedList sortedList1 = new SortedList();
sortedList1.Add("one", 1);
sortedList1.Add("two", 2);
sortedList1.Add("three", 3);
sortedList1.Add("four", 4);
foreach(DictionaryEntry kvp in sortedList1 )
Console.WriteLine("key: {0}, value: {1}", kvp.Key , kvp.Value );
خروجی نمونه مثال بالا به شکل زیر است :
key: four, value: 4 key: one, value: 1 key: three, value: 3 key: two, value: 2
حذف عناصر از یک SortedList
از متد ()Remove
و ()RemoveAt
برای حذف عناصر از SortedList استفاده میشود :
SortedList sortedList1 = new SortedList();
sortedList1.Add("one", 1);
sortedList1.Add("two", 2);
sortedList1.Add("three", 3);
sortedList1.Add("four", 4);
sortedList1.Remove("one");//removes element whose key is 'one'
sortedList1.RemoveAt(0);//removes element at zero index i.e first element: four
foreach(DictionaryEntry kvp in sortedList1 )
Console.WriteLine("key: {0}, value: {1}", kvp.Key , kvp.Value );
خروجی مثال بالا به شکل زیر است :
key: three, value: 3 key: two, value: 2
بررسی وجود مقادیر در SortedList
با استفاده از متدهای ()Contains
و ()ContainsKey
می توان مشخص کرد که عنصری خاص در SortedList وجود دارد و یا نه :
SortedList sortedList = new SortedList();
sortedList.Add(3, "Three");
sortedList.Add(2, "Two");
sortedList.Add(4, "Four");
sortedList.Add(1, "One");
sortedList.Add(8, "Five");
sortedList.Contains(2); // returns true
sortedList.Contains(4); // returns true
sortedList.Contains(6); // returns false
sortedList.ContainsKey(2); // returns true
sortedList.ContainsKey(6); // returns false
sortedList.ContainsValue("One"); // returns true
sortedList.ContainsValue("Ten"); // returns false