C#字典Dictionary类用法介绍

Dictionary< TKey, TValue> 类在C#中, 键和值的集合。它是System.Collection.Generics命名空间。的Dictionary< TKey, TValue> 泛型类提供了从一组键到一组值的映射。字典的每个加法项都包含一个值及其关联的键。使用Dictionary的键检索值非常快, 接近O(1), 因为Dictionary类是作为哈希表实现的。每个键Dictionary< TKey, TValue> 根据字典的相等比较器必须是唯一的。
注意:键不能为null, 但值可以是(如果值类型为价值是引用类型。
参数:

  • TKey:表示字典中键的类型。
  • TValue:表示字典中值的类型。
由于Dictionary < TKey, TValue> 是键和值的集合, 因此元素类型不是键的类型或值的类型。而是, 元素类型是键类型和值类型的KeyValuePair < TKey, TValue> 。
构造器
构造器 描述
Dictionary< TKey, TValue> () 初始化一个Dictionary < TKey, TValue> 类的新实例, 该实例为空, 具有默认的初始容量, 并使用默认的相等比较器作为键类型。
Dictionary< TKey, TValue> (IDictionary < TKey, TValue> ) 初始化Dictionary < TKey, TValue> 类的新实例, 该实例包含从指定IDictionary < TKey, TValue> 复制的元素, 并使用默认的相等比较器作为键类型。
Dictionary< TKey, TValue> (IDictionary < TKey, TValue> , IEqualityComparer < TKey> ) 初始化Dictionary < TKey, TValue> 类的新实例, 该实例包含从指定IDictionary < TKey, TValue> 复制的元素并使用指定的IEqualityComparer < T> 。
Dictionary< TKey, TValue> (IEqualityComparer < TKey> ) 初始化Dictionary < TKey, TValue> 类的新实例, 该实例为空, 具有默认的初始容量, 并使用指定的IEqualityComparer < T> 。
Dictionary< TKey, TValue> (Int32) 初始化字典的新实例 空的类, 具有指定的初始容量, 并使用默认的相等比较器作为键类型。
Dictionary< TKey, TValue> (Int32, IEqualityComparer < TKey> ) 初始化Dictionary < TKey, TValue> 类的新实例, 该实例为空, 具有指定的初始容量, 并使用指定的IEqualityComparer < T> 。
Dictionary< TKey, TValue> (SerializationInfo, StreamingContext) 使用序列化的数据初始化Dictionary < TKey, TValue> 类的新实例。
例子:
//C# code to create a Dictionary using System; using System.Collections.Generic; class GFG {//Driver code public static void Main() {//Create a new dictionary of //strings, with string keys. Dictionary< string , string> myDict = new Dictionary< string , string> (); //Adding key/value pairs in myDict myDict.Add( "1" , "C" ); myDict.Add( "2" , "C++" ); myDict.Add( "3" , "Java" ); myDict.Add( "4" , "Python" ); myDict.Add( "5" , "C#" ); myDict.Add( "6" , "HTML" ); //To get count of key/value pairs in myDict Console.WriteLine( "Total key/value pairs" + " in myDict are : " + myDict.Count); //Displaying the key/value pairs in myDict Console.WriteLine( "\nThe key/value pairs" + " in myDict are : " ); foreach (KeyValuePair< string , string> kvp in myDict) { Console.WriteLine( "Key = {0}, Value = https://www.lsbin.com/{1}" , kvp.Key, kvp.Value); } } }

输出如下:
Total key/value pairs in myDict are : 6The key/value pairs in myDict are : Key = 1, Value = https://www.lsbin.com/C Key = 2, Value = C++ Key = 3, Value = Java Key = 4, Value = Python Key = 5, Value = C# Key = 6, Value = HTML

属性
属性 描述
Comparer 获取IEqualityComparer < TKey, TValue> , 该IEqualityComparer < TKey, TValue> 用于确定字典的键是否相等。
Count 获取包含在Dictionary < TKey, TValue> 中的键/值对的数量。
Item[TKey] 获取或设置与指定键关联的值。
Keys 获取一个包含Dictionary < TKey, TValue> 中的键的集合。
Values 获取一个包含Dictionary < TKey, TValue> 中的值的集合。
示例1:
//C# code to get the keys //in the Dictionary using System; using System.Collections.Generic; class GFG {//Driver code public static void Main() {//Create a new dictionary of //strings, with string keys. Dictionary< string , string> myDict = new Dictionary< string , string> (); //Adding key/value pairs in myDict myDict.Add( "1" , "C" ); myDict.Add( "2" , "C++" ); myDict.Add( "3" , "Java" ); myDict.Add( "4" , "Python" ); myDict.Add( "5" , "C#" ); myDict.Add( "6" , "HTML" ); //To get count of key/value pairs in myDict Console.WriteLine( "Total key/value pairs" + " in myDict are : " + myDict.Count); //To get the keys alone, use the Keys property. Dictionary< string , string> .KeyCollection keyColl = myDict.Keys; //The elements of the KeyCollection //are strongly typed with the type //that was specified for dictionary keys. foreach ( string s in keyColl) { Console.WriteLine( "Key = {0}" , s); } } }

输出如下:
Total key/value pairs in myDict are : 6 Key = 1 Key = 2 Key = 3 Key = 4 Key = 5 Key = 6

示例2:
//C# code to get the values //in the Dictionary using System; using System.Collections.Generic; class GFG {//Driver code public static void Main() {//Create a new dictionary of //strings, with string keys. Dictionary< string , string> myDict = new Dictionary< string , string> (); //Adding key/value pairs in myDict myDict.Add( "1" , "C" ); myDict.Add( "2" , "C++" ); myDict.Add( "3" , "Java" ); myDict.Add( "4" , "Python" ); myDict.Add( "5" , "C#" ); myDict.Add( "6" , "HTML" ); //To get count of key/value pairs in myDict Console.WriteLine( "Total key/value pairs" + " in myDict are : " + myDict.Count); //To get the values alone, use the Values property. Dictionary< string , string> .ValueCollection valueColl = myDict.Values; //The elements of the ValueCollection //are strongly typed with the type //that was specified for dictionary values. foreach ( string s in valueColl) { Console.WriteLine( "Value = https://www.lsbin.com/{0}" , s); } } }

输出如下:
Total key/value pairs in myDict are : 6 Value = https://www.lsbin.com/C Value = C++ Value = Java Value = Python Value = C# Value = HTML

方法
方法 描述
Add(TKey, TValue) 将指定的键和值添加到字典中。
Clear() 从Dictionary < TKey, TValue> 中删除所有键和值。
ContainsKey(TKey) 确定Dictionary < TKey, TValue> 是否包含指定的键。
ContainsValue(TValue) 确定Dictionary < TKey, TValue> 是否包含特定值。
Equals(对象) 确定指定对象是否等于当前对象。
GetEnumerator() 返回迭代通过Dictionary < TKey, TValue> 的枚举数。
GetHashCode() 用作默认哈希函数。
GetObjectData(SerializationInfo, StreamingContext) 实现ISerializable接口, 并返回序列化Dictionary < TKey, TValue> 实例所需的数据。
GetType() 获取当前实例的类型。
MemberwiseClone() 创建当前对象的浅表副本。
OnDeserialization(Object) 当反序列化完成时, 实现ISerializable接口并引发反序列化事件。
Remove(TKey) 从Dictionary < TKey, TValue> 中移除具有指定键的值。
ToString() 返回表示当前对象的字符串。
TryGetValue(TKey, TValue) 获取与指定键关联的值。
示例1:
//C# code to remove all entries //from Dictionary using System; using System.Collections.Generic; class GFG {//Driver code public static void Main() {//Create a new dictionary of //strings, with string keys. Dictionary< string , string> myDict = new Dictionary< string , string> (); //Adding key/value pairs in myDict myDict.Add( "1" , "C" ); myDict.Add( "2" , "C++" ); myDict.Add( "3" , "Java" ); myDict.Add( "4" , "Python" ); myDict.Add( "5" , "C#" ); myDict.Add( "6" , "HTML" ); //To get count of key/value pairs in myDict Console.WriteLine( "Total key/value pairs " + "in myDict are : " + myDict.Count); myDict.Clear(); //To get count of key/value pairs in myDict Console.WriteLine( "Total key/value pairs in " + "myDict after Clear() operation are : " + myDict.Count); } }

输出如下:
Total key/value pairs in myDict are : 6 Total key/value pairs in myDict after Clear() operation are : 0

示例2:
//C# code to remove the entry with //the specified key from the Dictionary using System; using System.Collections.Generic; class GFG {//Driver code public static void Main() {//Create a new dictionary of //strings, with string keys. Dictionary< string , string> myDict = new Dictionary< string , string> (); //Adding key/value pairs in myDict myDict.Add( "1" , "C" ); myDict.Add( "2" , "C++" ); myDict.Add( "3" , "Java" ); myDict.Add( "4" , "Python" ); myDict.Add( "5" , "C#" ); myDict.Add( "6" , "HTML" ); //To get count of key/value pairs in myDict Console.WriteLine( "Total key/value pairs " + "in myDict are : " + myDict.Count); //Remove the entry with the //specified key from the Dictionary myDict.Remove( "Russia" ); //To get count of key/value pairs in myDict Console.WriteLine( "Total key/value pairs in" + " myDict after Remove() operation are : " + myDict.Count); } }

输出如下:
Total key/value pairs in myDict are : 6 Total key/value pairs in myDict after Remove() operation are : 6

【C#字典Dictionary类用法介绍】参考:
  • https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.dictionary-2?view=netframework-4.7.2

    推荐阅读