آموزش سیشارپ C# – بخش ۴۴
- مقدمه
تا کنون، با مفاهیمی مثل آرایه و 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”, 87);
students.Add(“Peter”, “No Score”);
students.Add(“Mary Jane”, 64);
students.Add(“Azhar”, 79);
کارهایی که در کدهای بالا در حال انجام است کاملاً مشخص است؛ نام دانشآموز در ابتدا قرار میگیرد و در مقابل آن نمرهی مربوط به امتحان او وارد میشود.
اما باید به نکتهای توجه کنید؛ در روش اول، اگر دو نام متشابه با مقادیر متفاوت داشته باشید، مشکلی برایتان بوجود نخواهد آمد، اما در روش دوم، کامپایلر از شما خطا میگیرد. به مثال زیر دقت کنید:
کد غلط:
students.Add(“Jenny”, 87);
students.Add(“Jenny”, 35);
کد درست:
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، اینجا را کلیک کنید.
سلام واقعا ساده وروان توضیح دادید مرسی
موسوی جان خسته نباشی خدا قوت
دستت درد نکنه ممنون
سلام برادر
قسمت 42 . 43 فایل پی دی اف یادتون رفت !!!
سلام دوست عزیزم،
بله در جریان هستم؛ انشاءالله تا آخر امشب تمامی بخشها در صورتی که فایل PDF آنها وجود نداشته باشد در دسترس عموم قرار خواهد گرفت.
با آرزوی موفقیت.
سلامی دوباره
درخواست گرامر و معانی دستورات در سی شارپ که بتونم بشتر آشنا بشوم به کجا مراجعه کنم؟
سلام دوست عزیزم،
میتونید به کتب مرجع سی شارپ مراجعه کنید.
موفق باشید.
با سلام وتشکر از آموزشهای مفید و کاربردی شما
اگر لطف کنید بفرمایید امکان آموزش سوکت پروگرامینگ سی شارپ را در قالب همین آموزشهای روان و جالب هست یا خیر.
چون هیچ منبع آموزشی به سادگی و روانی آموزشهای شما پیدانکردم امیدوارم سوکت را هم پوشش بدید.
در هر صورت موفق باشید
سلام دوست عزیز،
ممنونم از نظر لطفتون. بعید بدونم بخش شوکت رو بتونم پوشش بدم؛ اما اگر فرصتی کردم سعی خودم را خواهم کرد.
موفق باشید!
دمت گرم
خیلی دمت گرم
خیلی خیلی دمت گرم…
قربانت 😀
جناب موسوی عزیز اپیشنهاد می کنم یه صفحه در سایت ایجاد کنید به عنوان تقویم اموزشی ی فهرست و عنوان هر بخش با لینک ان و عنوان بخشهای بعدی اموزش که انشاالله در اینده منتشر می کنید قرار میگرفت
بی صبرانه منتظر قسمت های بعدی هستیم
خسته نباشی و خدا قوت کارت بینظیره
سلام عزیزم،
ممنونم از پیشنهادت؛ در رابطه با نظرت فکرهای خودم را خواهم کرد و در آینده نتیجه را اعلام میکنم انشاءالله. ممنونم از توجهتون.
موفق باشید!
Jeff Mosawy عزیز خسته نباشی
مرسی از سری آموزش خوبت .. منتظر پارت بعدی هستیم