Dictionary < TKey,TValue > 是一个泛型集合,它以不特定的顺序存储键值对。
Dictionary<TKey, TValue> 存储键值对。
属于System.Collection.Generic命名空间。
实现 IDictionary <TKey,TValue>接口。
键必须是唯一的,不能为null。
值可以为null或重复。
可以通过在索引器中传递相关键来访问值,例如 myDictionary[key]
元素存储为 KeyValuePair <TKey,TValue> 对象。
您可以通过传递Dictionary<TKey,TValue>对象来创建它可以存储的键和值的类型。下面的示例演示如何创建字典和添加键值对。
IDictionary<int, string> numberNames = new Dictionary<int, string>(); numberNames.Add(1,"One"); //使用Add()方法添加键/值 numberNames.Add(2,"Two"); numberNames.Add(3,"Three"); //以下引发运行时异常: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语法创建字典 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键。键必须是唯一的,否则将引发运行时异常。
可以使用索引器访问字典。指定键以获取关联值。还可以使用 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"; //引发运行时异常:KeyNotFoundException if(cities.ContainsKey("France")){ cities["France"] = "Paris"; }
Remove()方法从字典中删除现有的键值对。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"); //引发运行时异常:KeyNotFoundException if(cities.ContainsKey("France")){ // 取出键之前先检查一下 cities.Remove("France"); } cities.Clear(); //删除所有元素
下图说明了泛型Dictionary类的层次结构。
可在docs.microsoft.com上了解字典方法和属性。