字典是一种元素的集合,其中每个元素都由一个键和一个值组成:如果把某个键传给字典的方法,就会返回与它关联的值。它和其他语言里的映射或关联数组所起的作用相同。
可以这样创建字典:
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
遍历字典会遍历它的键值对。字典还有一些属性,可以让你单独遍历它的键或值。
在这个练习中,你将编写代码,借助一个国际拨号代码字典来跟踪国际拨号代码。
这个字典的键是整数(拨号代码),值是字符串(国家名称)。
你有 9 个任务,它们都涉及DialingCodes静态类。
实现(静态)方法DialingCodes.GetEmptyDictionary(),它返回一个空字典。
DialingCodes.GetEmptyDictionary();
// => empty dictionary
有一个预先填充好的字典,其中包含以下 3 个拨号代码:代码为 1 的 “United States of America”、代码为 55 的 “Brazil”,以及代码为 91 的 “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"