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 = {1}" , kvp.Key, kvp.Value);
}
}
}
输出如下:
Total key/value pairs in myDict are : 6
The key/value pairs in myDict are :
Key = 1, Value = 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 = {0}" , s);
}
}
}
输出如下:
Total key/value pairs in myDict are : 6
Value = 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
参考:
- https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.dictionary-2?view=netframework-4.7.2