با استفاده از کالکشن جنریک SortedList میتوان مقادیر را به شکل کلید و مقدار ذخیره سازی کرد. در فصول قبلی با نوع غیر جنریک آن آشنا شدید. اما در این فصل به SortedList جنریک خواهیم پرداخت.
کالکشن <SortedList<TKey,TValue
کالکشن SortedList
مقادیر را به صورت key
و value
در خود ذخیره میکند. این مقادیر به صورت پیش فرض بر اساس key مرتب سازی میشوند. سی شارپ دارای دو نوع SortedList است یکی جنریک و دیگری غیر جنریک (SortedList غیر جنریک) در این فصل با نوع جنریک آن آشنا خواهیم شد.
نوع جنریک کالکشن SortedList به شکل <SortedList<TKey,TValue
بوده که TKey
نوع کلید و TValue
نوع مقدار را مشخص میکند.
تعریف و نمونه سازی یک SortedList
می توان یک SortedList جنریک را به شکل زیر تعریف کرد :
SortedList<int,string> mySortedList = new SortedList<int,string>();
در نمونه مثال بالا از مقدار int
برای نوع key و از نوع string
برای نوع value استفاده شده است.
افزودن مقادیر به SortedList
از متد ()Add
برای افزودن مقادیر به SortedList استفاده کنید. key نمیتواند null باشد اما value میتواند شامل null باشد.
SortedList<int,string> sortedList1 = new SortedList<int,string>();
sortedList1.Add(3, "Three");
sortedList1.Add(4, "Four");
sortedList1.Add(1, "One");
sortedList1.Add(5, "Five");
sortedList1.Add(2, "Two");
SortedList<string,int> sortedList2 = new SortedList<string,int>();
sortedList2.Add("one", 1);
sortedList2.Add("two", 2);
sortedList2.Add("three", 3);
sortedList2.Add("four", 4);
// Compile time error: cannot convert from <null> to <int>
// sortedList2.Add("Five", null);
SortedList<double,int?> sortedList3 = new SortedList<double,int?>();
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 (در اینجا اعداد صحیح) مرتب سازی شده است. در sortedList۲ از آنجایی که نوع key رشته است ، این مرتب سازی بر اساس حروف الفبا انجام شده است.
دسترسی به عناصر SortedList
مقادیر در لیست SortedList میتوانند با استفاده از مقدار index
و key
مورد دسترسی قرار بگیرند :
SortedList<string,int> sortedList2 = new SortedList<string,int>();
sortedList2.Add("one", 1);
sortedList2.Add("two", 2);
sortedList2.Add("three", 3);
sortedList2.Add("four", 4);
Console.WriteLine(sortedList2["one"]);
Console.WriteLine(sortedList2["two"]);
Console.WriteLine(sortedList2["three"]);
//Following will throw runtime exception: KeyNotFoundException
Console.WriteLine(sortedList2["ten"]);
خروجی نمونه مثال بالا به شکل زیر است :
1 2 3
نمونه مثال زیر نحوه دسترسی به مقادیر SortedList با استفاده از حلقه for
را نشان می دهد :
SortedList<string,int> sortedList2 = new SortedList<string,int>();
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.Keys[i], sortedList2.Values[i]);
}
خروجی نمونه مثال بالا به شکل زیر است :
key: four, value: 4 key: one, value: 1 key: three, value: 3 key: two, value: 2
میتوان به شکل زیر و با استفاده از حلقه foreach
و ساختار KeyValuePair
به عناصر لیست دسترسی داشت :
SortedList<string,int> sortedList2 = new SortedList<string,int>();
sortedList2.Add("one", 1);
sortedList2.Add("two", 2);
sortedList2.Add("three", 3);
sortedList2.Add("four", 4);
foreach(KeyValuePair<string,int> kvp in sortedList2 )
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(key
و (RemoveAt(index
می توان مقادیر را از SortedList حذف کرد :
SortedList<string,int> sortedList2 = new SortedList<string,int>();
sortedList2.Add("one", 1);
sortedList2.Add("two", 2);
sortedList2.Add("three", 3);
sortedList2.Add("four", 4);
sortedList2.Remove("one");//removes the element whose key is 'one'
sortedList2.RemoveAt(0);//removes the element at zero index i.e first element: four
foreach(KeyValuePair<string,int> kvp in sortedList2 )
Console.WriteLine("key: {0}, value: {1}", kvp.Key , kvp.Value );
خروجی نمونه مثال بالا به شکل زیر است :
key: three, value: 3 key: two, value: 2