Hashtable

از Hashtable زماني استفاده مي شود که بخواهيد اطلاعات را بر اساس کليد/ مقدار ذخيره کنيد. به عنوان مثال نام دانش آموز و نمره او در امتحان. Hashtable به شما اجازه تلفيق متن و عدد را مي دهد. يک پروژه جديد ايجاد کنيد. با زدن دکمه F7 به محيط کدنويسي رفته و  در بالاي کدها و در قسمت تعريف فضاي نام، فضاي نام زير را وارد کنيد :

using System.Collections;

Hashtable در اين فضاي نام قرار دارد. کد زير را هم در داخل متد Main وارد کنيد.

Hashtable students = new Hashtable();

کد بالا يک شئ به نام students ايجاد مي کند. دو راه براي اضافه کردن داده ها به Hashtable  وجود دارد. اين دو روش در زير نشان داده شده اند :

students["Jenny"] = 87;
students["Peter"] = "No Score";
students["Mary Jane"] = 64;
students["Azhar"] = 79;

يا

students.Add("Jenny", 87);
students.Add("Peter", "No Score");
students.Add("Mary Jane", 64);
students.Add("Azhar", 79);

در روش اول از براکت استفاده شده است :

students["Jenny"] = 87;

در داخل براکت ها کليد را تايپ مي کنيد. که در اين مورد خاص “jenny” مي باشد. سپس بعد از علامت مساوي مقدار کليد را مي نويسيد. به اين نکته توجه کنيد که سه ورودي بالا داراي مقدار عددي بوده به جز Peter که داراي مقدار متني مي باشد. در روش دوم مقادير يا استفاده از متد Add در Hashtable ذخيره مي شوند:

students.Add("Jenny", 87);

در بين دو پرانتز ()Add، ابتدا نام کليد سپس کاما و بعد از کاما مقدار کليد را مي نويسيد. تفاوتي بين اين دو وجود دارد. اگر از متد ()Add استفاده کنيد نمي توانيد از کليدهاي مشابه استفاده کنيد. اما هنگام استفاده از براکت مي شود، پيغام خطا مي دهد :

students.Add("Jenny", 87);
students.Add("Jenny", 35);

پيغام خطا نمي دهد :

students["Jenny"] = 87;
students["Jenny"] = 35;

حال در زير شئ ايجاد شده کدهاي زير را هم اضافه کنيد:

Hashtable students = new Hashtable();
students["Jenny"] = 87;
students["Peter"] = "No Score";
students["Mary Jane"] = 64;
students["Azhar"] = 79;

foreach (DictionaryEntry child in students)
{
    Console.WriteLine("student: " + child.Key + " , Score: " + child.Value);
}

قبل از اجراي کد به حلقه foreach توجه کنيد. در داخل پرانتزها از دستور زير استفاده کرده ايم :

DictionaryEntry child

کد بالا يک متغير به نام child را که نوع آن يک DictionaryEntry مي باشد ايجاد مي کند. سي شارپ با استفاده از يک شي از اين نوع در هنگام کار با Hashtable، مقادير و کليد ها را برگشت مي دهد. در مثال فوق مقادير و کليد ها را در داخل کنترل listbox نشان مي دهيم.

"student: " + child.Key + " , Score: " + child.Value

بعد از نوشتن نام متغيرمانIntelliSense ، (child) ظاهر مي شود. Key خاصيتي است که نام کليد و Value خاصيتي است که مقدار کليد را برگشت مي دهد. نتيجه اجراي برنامه به صورت زير است :

student: Mary Jane , Score:64
student: Jenny , Score:87
student: Peter , Score: "No Score"
student: Azhar , Score: 79

همانند يک ليست (List) مي تواندي با استفاده از متدهاي Add و Remove آتم هايي به Hashtable اضافه و يا از آن کم کنيد.مانند زير :

students.Remove("Peter");

همانطور که مي بينيد با استفاده از نام کليد، نه مقدار ، يک آيتم را مي توان حذف نمود.