کالکشن SortedList
نام دوره: زبان سی شارپ مقدماتی
نویسنده: علی مقدم جاه (مدرس دوره)
کالکشن SortedList چیست؟
یکی از کلاسهای مربوط به کالکشنهای غیر جنریک، کلاس SortedList است.
برای ساخت یک مجموعه از نوع SortedList، باید ابتدا دستور زیر را در بالای برنامه خود using کنید:
using System.Collections;
سپس یک شئ از این کلاس به روش زیر در برنامه خود تعریف کنید:
SortedList list1 = new SortedList();
نکته: کلمه SortedList در سمت چپ مساوی، به معنای تعریف یک لیست غیر جنریک از نوع SortedList است.
نکته: کلمه list1، یک نام ساده بوده که توسط برنامهنویس انتخاب شده که میتواند هر نام دلخواه دیگری باشد.
نکته: کلمه کلیدی new به معنای گرفتن فضا از حافظه برای ساخت این لیست غیر جنریک است که باید حتما نوشته شود.
نکته: کلمه ()SortedList، متد سازنده کلاس SortedList بوده که باید حتما نوشته شود.
با توجه به دستور فوق، یک لیست غیر جنریک از نوع SortedList در حافظه ساخته شد.
باتوجه به توضیحات بالا، قطعا متوجه شدهاید که توضیحات بالا را از پست آموزش کالکشن ArrayList کپی کردیم!
علت این کپیبرداری این است که کلاس SortedList، دقیقا مثل کلاس ArrayList بوده که درنتیجه هر آنچه از کلاس ArrayList بلد هستید را میتوانید در کلاس SortedList نیز استفاده کنید.
اما به طور قطع کلاس SortedList، تفاوتهایی با کلاس ArrayList دارد:
۱. کلاس SortedList، مجموعه شما را به طور پیش فرض توسط کلیدها مرتب میکند، به طوری که شما فکر میکنید از متد Sort استفاده کردهاید!
۲. اگر خاطرتان باشد، خانههای کلاس ArrayList پس از ایجاد توسط متد Add تنها نیاز به ورود داده جهت ذخیرهسازی در پرانتز متد Add را داشتند، اما وقتی از کلاس SortedList استفاده میکنیم، باید به عنوان ورودی به متد Add، علاوه بر مقدار، کلید یا همان اَندیس هم مشخص کنیم!
کلید یا همان Key چیست؟
منظور از کلید همان شماره خانه یا index و اَندیس است؛ در آرایهها و ArrayList ها، خانهها از عدد ۰ بصورت اتوماتیک شمارهگذاری شده و ما به عنوان برنامهنویس تنها داده را جهت ذخیرهسازی ارسال میکردیم؛ اما در SortedList ها باید علاوه بر مقدار، کلید یا شماره اَندیس خانه هم در متد Add مشخص کنیم.
نحوه استفاده از متد Add برای کلاس SortedList به شکل زیر است:
SortedList list1 = new SortedList();
list1.Add("کلید","مقدار");
list1.Add("Key","Value");
مثال:
SortedList list1 = new SortedList();
list1.Add("test1","ali");
list1.Add("test2",true);
list1.Add("ali",19.26);
list1.Add("book",'A');
در مثال فوق، مقادیر “ali” و true و 19.26 و ‘A’ مقادیر موجود در ۴ خانه مختلف هستند.
همچنین کلیدهای این خانهها عبارت اند از “test1” و “test2” و “ali” و “book” !
نکته: طبق قوانین کالکشنها، در هر خانه میتوانیم برای مقداردهی آن از هر نوع دادهای بدون محدودیت استفاده کنیم.
نکته: اجباری در یکسان بودن کلیدها وجود ندارد! همانطور که مشاهده کردید، کلیدهای مثال بالا از سه کلمه مختلف test و ali و book هستند.
نکته: در کالکشن SortedList، باید جنس داده کلیدها حتما از یک شکل باشند؛ به عنوان مثال در کد بالا، تمامی چهار کلید “test1” و “test2” و “ali” و “book” از جنس رشته یا همان string هستند.
در نتیجه نمیتوانید حتی یکی از این کلیدها را از جنس دیگری جز string استفاده کنید، علت این اجبار چیست؟
همانطور که ابتدای این پست آموزشی خدمتتان عرض کردیم، کلاس SortedList برگرفته از نام خود، بصورت پیشفرض دادههای خود را بر اساس کلیدشان مرتب میکند.
پس علت این اجبار، مرتب سازی خانهها است؟
بله، کلاس SortedList بابت مرتبسازی خانهها که بر اساس کلیدهایشان این کار را انجام میدهد، نیاز دارد تا نوع داده تمامی کلیدها شبیه به هم باشند.
در غیراینصورت مرتب سازی خانههایی که کلیدهایشان از جنسهای مختلفی مثل string و int و bool و غیره باشد، کار غیرممکنی است.
چند مثال دیگر، به جهت درک راحتتر:
SortedList list1 = new SortedList();
list1.Add(1,"ali");
list1.Add(2,true);
list1.Add(3,19.26);
list1.Add(4,'A');
در این مثال، تمامی کلید ها از نوع int میباشند.
SortedList list1 = new SortedList();
list1.Add('B',"ali");
list1.Add('A',true);
list1.Add('Z',19.26);
list1.Add('U','A');
در این مثال، تمامی کلید ها از نوع char میباشند.
درصورتی که بخواهید دادههای داخل مجموعه SortedList را با استفاده از حلقههای تکرار چاپ کنید، باید حتما برای حلقه مشخص کنید که هدف شما دسترسی به کلیدهای مجموعه بوده و یا دادههای هر خانه!
الف) چاپ کلیدهای مجموعه SortedList
به مثال زیر توجه کنید:
SortedList names = new SortedList();
names.Add("hannaneh", "mgh");
names.Add("carol", "aliasghar");
names.Add("taraneh", 250);
names.Add("iman", 3.141516f);
برای دسترسی به کلیدهای مجموعه SortedList حتما باید عبارت Keys توسط شناسه مجموعه در حلقه فراخوانی شود:
foreach (var item in names.Keys)
{
Console.WriteLine(item);
}
:خروجی
carol
hannaeh
iman
taraneh
همانطور که مشاهده کردید، تنها کلیدهای مجموعه names پس از مرتبسازی خودکار بر اساس کلیدها توسط کلاس SortedList چاپ شدند.
ب) چاپ دادههای مجموعه SortedList
به مثال زیر توجه کنید:
SortedList names = new SortedList();
names.Add("hannaneh", "mgh");
names.Add("carol", "aliasghar");
names.Add("taraneh", 250);
names.Add("iman", 3.141516f);
برای دسترسی به دادههای مجموعه SortedList حتما باید عبارت Values توسط شناسه مجموعه در حلقه فراخوانی شود:
foreach (var item in names.Values)
{
Console.WriteLine(item);
}
:خروجی
3.141516f
aliasghar
mgh
250
همانطور که مشاهده کردید، تنها دادههای مجموعه names پس از مرتبسازی خودکار بر اساس کلیدها توسط کلاس SortedList چاپ شدند.
جهت شرکت در دورههای زبان برنامه نویسی سیشارپ، از کد تخفیف heplc30 استفاده کنید.