C# Dictionary(字典)

Dictionary < TKey,TValue > 是一個泛型集合,它以不特定的順序存儲鍵值對。

字典特性

  • Dictionary<TKey, TValue> 存儲鍵值對。

  • 屬于System.Collection.Generic命名空間。

  • 實現(xiàn) IDictionary <TKey,TValue>接口。

  • 鍵必須是唯一的,不能為null。

  • 值可以為null或重復。

  • 可以通過在索引器中傳遞相關(guān)鍵來訪問值,例如 myDictionary[key]

  • 元素存儲為 KeyValuePair <TKey,TValue> 對象。

創(chuàng)建字典

您可以通過傳遞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(); //刪除所有元素

字典類層次結(jié)構(gòu)

下圖說明了泛型Dictionary類的層次結(jié)構(gòu)。

泛型字典C#

可在docs.microsoft.com上了解字典方法和屬性。

丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清