Jeff Mosawy
- مقدمه
تا کنون، با مفاهیمی مثل آرایه و List<> آشنا شدهاید، اما آیا به این مورد فکر کردهاید که در مواردی که ما در برنامه خود یک آرایه یا List<> تعریف میکنیم، تنها میتوانیم در آنها مقادیری اضافه کنیم که از همان جنس باشد؟ یعنی اگر آرایه یا لیستی از نوع string تعریف کنیم، تنها خواهیم توانست که مقادیری از جنس String به آنها اضافه کنیم.
در سیشارپ، نوع دیگری از مجموعهها وجود دارد که میتوانید دو مقادار مختلف را همزمان با هم به یکدیگر نسبت دهیم. پس با ما باشید تا در ادامه در رابطه با مفهموم جدیدی به نام Hashtable آشنا شوید.
- آشنایی و استفاده از Hashtable
ما زمانی از Hashtableها استفاده میکنیم که میخواهیم آیتمهایی را به مجموعهی خود اضافه کنیم که براساس کلید/مقدار باشند. شاید برایتان کمی مفهوم کلید/مقدار (Key/Value) ناآشنا باشد، پس با یک مثال با هم جلو میرویم.
برای مثال، نام یک دانشآموز و نمرهی او در امتحان. در واقع شما میتوانید چنین مقادیری را در Hashtable اضافه کنید؛ یعنی میتوانید نوع string و int را با همدیگر مخلوط کنید.
به فرمی که در جلسه پیش ساختهایم، یک Button اضافه کنید؛ بر روی آن دابل کلیک کنید. ابتدا به قسمت بالای کدها (بخش Usingها) دقت کنید. توجه داشته باشید که برای استفاده از Hashtable، میبایست از Using زیر استفاده کنید:
using System.Collections;
شما تا الان عبارت System.Collections.Generic را داشتهاید، اما Hashtable جزو این namespace نیست، بلکه جزو namespace با نام Collections میباشد.
در داخل بخش کدنویسی مربوط به Button جدید خود، با استفاده از کد زیر یک Hashtable تعریف کنید:
Hashtable students = new Hashtable();
با استفاده از کد بالا، شما شیءای با نام Students از نوع Hashtable تعریف میکنید. برای اینکه به این Hashtable مقدار بدهید (آیتمهایی را به آن اضافه کنید)، شما دو راه پیش رو خواهید داشت. یعنی در واقع اینکار به دو روش انجام میشود.
راه اول:
students[“Jenny”] = 87;
students[“Peter”] = “No Score”;
students[“Mary Jane”] = 64;
students[“Azhar”] = 79;
راه دوم:
students.Add(“Jenny”, ۸۷);
students.Add(“Peter”, “No Score”);
students.Add(“Mary Jane”, ۶۴);
students.Add(“Azhar”, ۷۹);
کارهایی که در کدهای بالا در حال انجام است کاملاً مشخص است؛ نام دانشآموز در ابتدا قرار میگیرد و در مقابل آن نمرهی مربوط به امتحان او وارد میشود.
اما باید به نکتهای توجه کنید؛ در روش اول، اگر دو نام متشابه با مقادیر متفاوت داشته باشید، مشکلی برایتان بوجود نخواهد آمد، اما در روش دوم، کامپایلر از شما خطا میگیرد. به مثال زیر دقت کنید:
کد غلط:
students.Add(“Jenny”, ۸۷);
students.Add(“Jenny”, ۳۵);
کد درست:
students[“Jenny”] = 87;
students[“Jenny”] = 35;
برای اینکه خودتان نیز در این پروژه کار با Hashtableها را امتحان کنید، کدهای زیر را قرار دهید:
Hashtable students = new Hashtable();
students[“Jenny”] = 87;
students[“Peter”] = “No Score”;
students[“Mary Jane”] = 64;
students[“Azhar”] = 79;
foreach (DictionaryEntry child in students)
{
listBox1.Items.Add(“student: “ + child.Key + “ ,Score: “ + child.Value);
}
پیش از آنکه کدهای بالا را اجرا کنید، به عبارت زیر دقت کنید:
DictionaryEntry child
در سیشارپ، در هنگامی که از حلقه foreach برای Hashtableها استفاده میکنید، میبایست که از نوع داده DictionaryEntry استفاده کنید؛ به این دلیل است که این نوع داده میتواند همزمان هم Key را به ما برگرداند و هم Value را.
به عبارتهای child.Key و child.Value نیز دقت کنید؛ اینها همان Key/Valueهایی هستند که میتوانید بصورت مستقیم به آنها دسترسی پیدا کنید؛ که ما در اینجا برای نمایش نام دانشآموز و نمرهی او در ListBox، مجبور شدیم که از آنها استفاده کنیم.
نرمافزار خود را اجرا کنید؛ باید شاهد چنین نتیجهای باشید:

درضمن توجه داشته باشد که در Hashtableها نیز همانند لیستها میتوانید مقادیری را اضافه و حذف نمایید. برای حذف باید از Key استفاده کنید و بدین شکل حذف کنید:
students.Remove(“Peter”);
جهت دریافت این بخش آموزشی بصورت یک فایل PDF، اینجا را کلیک کنید.
