字典是一種元素的集合,每個元素都由一個鍵和一個值組成;如果把某個鍵傳給字典的方法,就會回傳它對應的值。它在其他語言裡的角色,就相當於映射或關聯式陣列。
字典可以這樣建立:
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"