轨道
/
C#
C#
/
练习
/
国际通话行家
国际通话行家

国际通话行家

学习练习

简介

字典

字典是一种元素的集合,其中每个元素都由一个键和一个值组成:如果把某个键传给字典的方法,就会返回与它关联的值。它和其他语言里的映射或关联数组所起的作用相同。

可以这样创建字典:

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静态类。

1. 创建一个新字典

实现(静态)方法DialingCodes.GetEmptyDictionary(),它返回一个空字典。

DialingCodes.GetEmptyDictionary();
// => empty dictionary

2. 创建一个预先填充好的字典

有一个预先填充好的字典,其中包含以下 3 个拨号代码:代码为 1 的 “United States of America”、代码为 55 的 “Brazil”,以及代码为 91 的 “India”。实现(静态)方法DialingCodes.GetExistingDictionary()来返回这个预先填充好的字典:

DialingCodes.GetExistingDictionary();
// => 1 => "United States of America", 55 => "Brazil", 91 => "India"

3. 向空字典中添加一个国家

实现(静态)方法DialingCodes.AddCountryToEmptyDictionary(),它会创建一个字典,并向其中添加一个拨号代码和对应的国家名称。

DialingCodes.AddCountryToEmptyDictionary(44, "United Kingdom");
// => 44 => "United Kingdom"

4. 向已有字典中添加一个国家

实现(静态)方法DialingCodes.AddCountryToExistingDictionary(),它会把一个拨号代码和对应的国家名称添加到一个非空字典中。

DialingCodes.AddCountryToExistingDictionary(DialingCodes.GetExistingDictionary(),
  44, "United Kingdom");
// => 1 => "United States of America", 44 => "United Kingdom", 55 => "Brazil", 91 => "India"

5. 获取与某个拨号代码匹配的国家名称

实现(静态)方法DialingCodes.GetCountryNameFromDictionary(),它接收一个拨号代码,并返回对应的国家名称。如果字典中不包含该拨号代码,则返回空字符串。

DialingCodes.GetCountryNameFromDictionary(
  DialingCodes.GetExistingDictionary(), 55);
// => "Brazil"

DialingCodes.GetCountryNameFromDictionary(
  DialingCodes.GetExistingDictionary(), 999);
// => string.Empty

6. 检查字典中是否存在某个国家

实现(静态)方法DialingCodes.CheckCodeExists(),用于检查某个拨号代码是否存在于字典中。

DialingCodes.CheckCodeExists(DialingCodes.GetExistingDictionary(), 55);
// => true

7. 更新国家名称

实现(静态)方法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"

8. 从字典中删除一个国家

实现(静态)方法DialingCodes.RemoveCountryFromDictionary(),它接收一个拨号代码,并从字典中删除对应的记录,也就是拨号代码和国家名称。

DialingCodes.RemoveCountryFromDictionary(
  DialingCodes.GetExistingDictionary(), 91);
// => 1 => "United States of America", 55 => "Brazil"

9. 找出名称最长的国家

实现(静态)方法DialingCodes.FindLongestCountryName(),它会返回字典中名称最长的那个国家的名称。

DialingCodes.FindLongestCountryName(
  DialingCodes.GetExistingDictionary());
// => "United States of America"
通过 GitHub 编辑 链接将在新窗口或新标签页中打开
C# Exercism

准备好开始 国际通话行家 了吗?

注册 Exercism,借助 62 个概念178 个练习 和真人导师指导,学习并掌握 C#,全部免费。