Dictionary < TKey,TValue > 是一個泛型集合,它以不特定的順序存儲鍵值對。
Dictionary<TKey, TValue> 存儲鍵值對。
屬于System.Collection.Generic命名空間。
實現(xiàn) IDictionary <TKey,TValue>接口。
鍵必須是唯一的,不能為null。
值可以為null或重復。
可以通過在索引器中傳遞相關(guān)鍵來訪問值,例如 myDictionary[key]
元素存儲為 KeyValuePair <TKey,TValue> 對象。
您可以通過傳遞Dictionary<TKey,TValue>對象來創(chuàng)建它可以存儲的鍵和值的類型。下面的示例演示如何創(chuàng)建字典和添加鍵值對。
IDictionary<int, string> numberNames = new Dictionary<int, string>(); numberNames.Add(1,"One"); //使用Add()方法添加鍵/值 numberNames.Add(2,"Two"); numberNames.Add(3,"Three"); //以下引發(fā)運行時異常:key already added.。 //numberNames.Add(3, "Three"); foreach(KeyValuePair<int, string> kvp in numberNames) Console.WriteLine("Key: {0}, Value: {1}", kvp.Key, kvp.Value); //使用collection-initializer語法創(chuàng)建字典 var cities = new Dictionary<string, string>(){ {"UK", "London, Manchester, Birmingham"}, {"USA", "Chicago, New York, Washington"}, {"India", "Mumbai, New Delhi, Pune"} }; foreach(var kvp in cities) Console.WriteLine("Key: {0}, Value: {1}", kvp.Key, kvp.Value);
在上面的示例中,numberNames 是 Dictionary<int,string>類型的字典,因此它可以存儲int鍵和字符串值。同樣,cities 是一個 Dictionary<string,string> 類型的字典,因此它可以存儲字符串鍵和字符串值。字典不能包含重復鍵 或 null鍵,而值可以是重復鍵或null鍵。鍵必須是唯一的,否則將引發(fā)運行時異常。
可以使用索引器訪問字典。指定鍵以獲取關(guān)聯(lián)值。還可以使用 ElementAt()方法從指定的索引中獲取 KeyValuePair 。
var cities = new Dictionary<string, string>(){ {"UK", "London, Manchester, Birmingham"}, {"USA", "Chicago, New York, Washington"}, {"India", "Mumbai, New Delhi, Pune"} }; Console.WriteLine(cities["UK"]); //打印 UK 鍵值 Console.WriteLine(cities["USA"]);//打印 USA 鍵值 //Console.WriteLine(cities["France"]); // 運行時異常:run-time exception: Key does not exist //使用ContainsKey()檢查未知鍵 if(cities.ContainsKey("France")){ Console.WriteLine(cities["France"]); } //使用TryGetValue()獲取未知鍵的值 string result; if(cities.TryGetValue("France", out result)) { Console.WriteLine(result); } //使用ElementAt()通過索引檢索鍵值對 for (int i = 0; i < cities.Count; i++) { Console.WriteLine("Key: {0}, Value: {1}", cities.ElementAt(i).Key, cities.ElementAt(i).Value); }
通過在索引器中指定鍵來更新鍵的值。如果字典中不存在鍵,它將拋出KeyNotFoundException,因此在訪問未知鍵之前使用ContainsKey()方法
var cities = new Dictionary<string, string>(){ {"UK", "London, Manchester, Birmingham"}, {"USA", "Chicago, New York, Washington"}, {"India", "Mumbai, New Delhi, Pune"} }; cities["UK"] = "Liverpool, Bristol"; //更新 UK 鍵的值 cities["USA"] = "Los Angeles, Boston"; //更新 USA 鍵的值 //cities["France"] = "Paris"; //引發(fā)運行時異常:KeyNotFoundException if(cities.ContainsKey("France")){ cities["France"] = "Paris"; }
Remove()方法從字典中刪除現(xiàn)有的鍵值對。Clear()方法刪除字典中的所有元素。
var cities = new Dictionary<string, string>(){ {"UK", "London, Manchester, Birmingham"}, {"USA", "Chicago, New York, Washington"}, {"India", "Mumbai, New Delhi, Pune"} }; cities.Remove("UK"); // 刪除 UK //cities.Remove("France"); //引發(fā)運行時異常:KeyNotFoundException if(cities.ContainsKey("France")){ // 取出鍵之前先檢查一下 cities.Remove("France"); } cities.Clear(); //刪除所有元素
下圖說明了泛型Dictionary類的層次結(jié)構(gòu)。
可在docs.microsoft.com上了解字典方法和屬性。