«دیکشنری» مجموعهای از عناصر است که هر عنصر آن از یک «کلید» و یک «مقدار» تشکیل میشود، بهگونهای که اگر کلیدی را به یکی از «متد»های دیکشنری بدهید، مقدار متناظر با آن برگردانده میشود. نقش آن همان نقش «مپ» یا «آرایهی انجمنی» در زبانهای دیگر است.
یک دیکشنری را میتوان به شکل زیر ساخت:
new Dictionary<int, string>();
// Empty dictionary
یا
new Dictionary<int, string>
{
[1] = "One",
[2] = "Two"
};
// Or
new Dictionary<int, string>
{
{1, "One"},
{2, "Two"}
};
// 1 => "One", 2 => "Two"
توجه کنید که نوع کلید و مقدار بخشی از تعریف دیکشنری است.
پس از ساخته شدن، میتوان با متدهای توکار Add و Remove درایههایی را به دیکشنری اضافه یا از آن حذف کرد.
خواندن یا بهروزرسانی مقدارها در یک دیکشنری با نمایهگذاری آن بهکمک یک کلید انجام میشود:
var numbers = new Dictionary<int, string>
{
{1, "One"},
{2, "Two"}
};
// Set the value of the element with key 2 to "Deux"
numbers[2] = "Deux";
// Get the value of the element with key 2
numbers[2];
// => "Deux"
میتوانید با این کد بررسی کنید که آیا مقداری در دیکشنری وجود دارد یا نه:
var dict = new Dictionary<string, string>{/*...*/};
dict.ContainsKey("some key that exists");
// => true
شمارش روی یک دیکشنری، جفتهای کلید و مقدار آن را شمارش میکند. دیکشنری ویژگیهایی هم دارد که امکان شمارش روی کلیدها یا مقدارهای آن را فراهم میکنند.
در این تمرین، کدی مینویسید که کدهای تلفن بینالمللی را در قالب یک دیکشنری کد تلفن بینالمللی نگه دارد.
این دیکشنری برای کلیدهایش از عدد صحیح (کد تلفن) و برای مقدارهایش از رشته (نام کشور) استفاده میکند.
۹ تسک دارید که همه به کلاس استاتیک DialingCodes مربوط میشوند.
متد (استاتیک) DialingCodes.GetEmptyDictionary() را پیادهسازی کنید که یک دیکشنری خالی برمیگرداند.
DialingCodes.GetEmptyDictionary();
// => empty dictionary
یک دیکشنری از پیش پر شده وجود دارد که این ۳ کد تلفن را در خود دارد: "United States of America" با کد ۱، "Brazil" با کد ۵۵ و "India" با کد ۹۱. متد (استاتیک) DialingCodes.GetExistingDictionary() را پیادهسازی کنید تا این دیکشنری از پیش پر شده را برگرداند:
DialingCodes.GetExistingDictionary();
// => 1 => "United States of America", 55 => "Brazil", 91 => "India"
متد (استاتیک) DialingCodes.AddCountryToEmptyDictionary() را پیادهسازی کنید که یک دیکشنری میسازد و یک کد تلفن و نام کشور مرتبط با آن را به آن اضافه میکند.
DialingCodes.AddCountryToEmptyDictionary(44, "United Kingdom");
// => 44 => "United Kingdom"
متد (استاتیک) DialingCodes.AddCountryToExistingDictionary() را پیادهسازی کنید که یک کد تلفن و نام کشور مرتبط با آن را به یک دیکشنری غیرخالی اضافه میکند.
DialingCodes.AddCountryToExistingDictionary(DialingCodes.GetExistingDictionary(),
44, "United Kingdom");
// => 1 => "United States of America", 44 => "United Kingdom", 55 => "Brazil", 91 => "India"
متد (استاتیک) DialingCodes.GetCountryNameFromDictionary() را پیادهسازی کنید که یک کد تلفن میگیرد و نام کشور متناظر را برمیگرداند. اگر کد تلفن در دیکشنری نباشد، رشتهی خالی برگردانده میشود.
DialingCodes.GetCountryNameFromDictionary(
DialingCodes.GetExistingDictionary(), 55);
// => "Brazil"
DialingCodes.GetCountryNameFromDictionary(
DialingCodes.GetExistingDictionary(), 999);
// => string.Empty
متد (استاتیک) DialingCodes.CheckCodeExists() را پیادهسازی کنید تا بررسی کنید آیا یک کد تلفن در دیکشنری وجود دارد یا نه.
DialingCodes.CheckCodeExists(DialingCodes.GetExistingDictionary(), 55);
// => true
متد (استاتیک) DialingCodes.UpdateDictionary() را پیادهسازی کنید که یک کد تلفن میگیرد و نام کشور متناظر در دیکشنری را با نام کشوری که به عنوان پارامتر پاس داده شده جایگزین میکند. اگر کد تلفن در دیکشنری وجود نداشته باشد، دیکشنری بدون تغییر میماند.
DialingCodes.UpdateDictionary(
DialingCodes.GetExistingDictionary(), 1, "Les États-Unis");
// => 1 => "Les États-Unis", 55 => "Brazil", 91 => "India"
DialingCodes.UpdateDictionary(
DialingCodes.GetExistingDictionary(), 999, "Newlands");
// 1 => "United States of America", 55 => "Brazil", 91 => "India"
متد (استاتیک) DialingCodes.RemoveCountryFromDictionary() را پیادهسازی کنید که یک کد تلفن میگیرد و رکورد متناظر، یعنی کد تلفن به همراه نام کشور، را از دیکشنری حذف میکند.
DialingCodes.RemoveCountryFromDictionary(
DialingCodes.GetExistingDictionary(), 91);
// => 1 => "United States of America", 55 => "Brazil"
متد (استاتیک) DialingCodes.FindLongestCountryName() را پیادهسازی کنید که نام کشوری با بلندترین نام را از میان نامهای ذخیرهشده در دیکشنری برمیگرداند.
DialingCodes.FindLongestCountryName(
DialingCodes.GetExistingDictionary());
// => "United States of America"