學習軌道
/
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#,全部免費。