IDictionary 的重要属性和方法:将元素添加到词典中:访问字典元素:检查现有元素:删除字典中的元素: C#中的字典与英语字典相同。 英语词典是词汇及其定义的集合,通常以一种或多种特定语言按字母顺序列出。 同样,C#中的字典是键和值的">
猿教程 Logo

C# Dictionary

C#中的字典与英语字典相同。 英语词典是词汇及其定义的集合,通常以一种或多种特定语言按字母顺序列出。 同样,C#中的字典是键和值的集合,其中键类似于字,值类似于定义。

Dictionary<TKey,TValue>是包含在System.Collection.Generics命名空间中的通用集合。 TKey表示键的类型,TValue是TValue的类型。


字典初始化:

Dictionary可以使用IDictionary <Tkey,TValue>接口的变量以及Dictionary<TKey,Tvalue>类进行初始化:

相关实例:

IDictionary<int, string> dict = new Dictionary<int, string>();
        
//or

Dictionary<int, string> dict = new Dictionary<int, string>();

在上面的例子中,我们在声明Dictionary对象时指定了键和值的类型。 int是一个键的类型,string是一个值类型,将被存储到一个名为dict的Dictionary对象中。 您可以对键和值使用任何有效的C#数据类型。

建议编程到接口而不是类。 所以,使用IDictionary <TKey,TValue>类型变量初始化一个Dictionary对象。

注意

Dictionary不能包含重复键或空键,其中值可以重复或设置为null。 键必须是唯一的,否则会抛出运行时异常。


IDictionary 的重要属性和方法:

属性描述
Count获取Dictionary<TKey,TValue>中存在的元素总数。
IsReadOnly返回一个布尔值,指示Dictionary<TKey,TValue>是否为只读。
Item使用Dictionary<TKey,TValue>中的指定键获取或设置元素。
Keys返回Dictionary<TKey,TValue>的键集合。
Values返回Dictionary<TKey,TValue>中的值集合。
方法描述
void Add(T)将项目添加到Dictionary集合中。
void Add(TKey key, TValue value)在Dictionary <TKey,TValue>集合中添加键值对。
void Remove(T item)从Dictionary<TKey,TValue>中删除特定项的第一次出现。
void Remove(TKey)删除具有指定键的元素。
bool ContainsKey(TKey key)检查指定的键是否存在于Dictionary <TKey,TValue>中。
bool ContainsValue(TValue value)检查指定的键是否存在于Dictionary <TKey,TValue>中。
void Clear()从Dictionary<TKey,TValue>中删除所有元素。
bool TryGetValue(TKey key,out TValue value)返回true并使用指定的键分配值,如果键不存在,则返回false。

将元素添加到词典中:

使用Add()方法在字典中添加键值对。

Add()签名:void Add(TKey,Tvalue)

相关实例:

IDictionary<int, string> dict = new Dictionary<int, string>();
dict.Add(1,"One");
dict.Add(2,"Two");
dict.Add(3,"Three");

IDictionary类型实例对Add()方法还有一个重载。 它接受KeyValuePair <TKey,TValue> struct作为参数。

Add()签名:void Add(KeyValuePair <TKey,TValue> item);

相关实例:

IDictionary<int, string> dict = new Dictionary<int, string>();

dict.Add(new KeyValuePair<int, string>(1, "One"));
dict.Add(new KeyValuePair<int, string>(2, "Two"));

//The following is also valid
dict.Add(3, "Three");

它也可以使用集合初始化语法用键和值来初始化,如下所示。

相关实例:

IDictionary<int, string> dict = new Dictionary<int, string>()
                                                            {
                                                                {1,"One"},
                                                                {2, "Two"},
                                                                {3,"Three"}
                                                            };

访问字典元素:

字典元素可以通过许多方式访问。 foreach,for循环或索引器。

使用foreach或for循环来访问字典的所有元素。 字典存储键值对。 因此,您可以在foreach循环中使用KeyValuePair <TKey,TValue>类型或隐式类型变量var,如下所示。

相关实例:

Dictionary<int, string> dict = new Dictionary<int, string>()
                                                            {
                                                                {1,"One"},
                                                                {2, "Two"},
                                                                {3,"Three"}
                                                            };

foreach (KeyValuePair<int, string> item in dict)
{
    Console.WriteLine("Key: {0}, Value: {1}", item.Key, item.Value);
}

运行结果:

Key: 1, Value: One 
Key: 2, Value: Two 
Key: 3, Value: Three

使用for循环访问所有元素。 使用字典的Count属性来获取字典中元素的总数。

相关实例:

Dictionary<int, string> dict = new Dictionary<int, string>()
                                                            {
                                                                {1,"One"},
                                                                {2, "Two"},
                                                                {3,"Three"}
                                                            };


for (int i = 0; i < dict.Count; i++)
{
    Console.WriteLine("Key: {0}, Value: {1}", 
                                            dict.Keys.ElementAt(i), 
                                            dict[ dict.Keys.ElementAt(i)]);
}

运行结果:

Key: 1, Value: One 
Key: 2, Value: Two 
Key: 3, Value: Three

字典可以像数组一样访问其各个元素。 指定键(不是索引),像从数组中使用索引器来从字典中获取值。

相关实例:

Dictionary<int, string> dict = new Dictionary<int, string>()
                                                            {
                                                                {1,"One"},
                                                                {2, "Two"},
                                                                {3,"Three"}
                                                            };

Console.WriteLine(dict[1]); //returns One
Console.WriteLine(dict[2]); // returns Two

运行结果:

One 
Two
注意
索引器将键作为参数。 如果指定的键不存在,那么将抛出一个KeyNotFoundException。

如果您不确定键,请使用TryGetValue()方法。 如果它不能找到键,TryGetValue()方法将返回false,而不是引发异常。

TryGetValue()签名:bool TryGetValue(TKey key,out TValue value)

相关实例:

Dictionary<int, string> dict = new Dictionary<int, string>()
                                {
                                    {1,"One"},
                                    {2, "Two"},
                                    {3,"Three"}
                                };

string result;

if(dict.TryGetValue(4, out result))
{
    Console.WriteLine(result);
}
else
{
    Console.WriteLine("Could not find the specified key.");
}

运行结果:

Could not find the specified key.

检查现有元素:

字典包括各种方法来确定字典是否包含指定的元素或键。 使用ContainsKey()方法检查字典中是否存在指定的键。

使用Contains()方法检查指定的键和值对是否存在于字典中。

ContainsKey()签名:bool ContainsKey(TKey key)

Contains()签名:bool Contains(KeyValuePair <TKey,TValue> item)

相关实例:

Dictionary<int, string> dict = new Dictionary<int, string>()
                                            {
                                                {1,"One"},
                                                {2, "Two"},
                                                {3,"Three"}
                                            };
dict.ContainsKey(1); // returns true
dict.ContainsKey(4); // returns false

dict.Contains(new KeyValuePair<int,string>(1,"One")); // returns true

Contains()方法的另一个重载将IEqualityComperer作为第二个参数。 当您要自定义等式比较时,将使用IEqualityComparer的实例。 例如,考虑以下存储学生对象的字典示例。

相关实例:

public class Student
{
    public int StudentID { get; set; }
    public string StudentName { get; set; }
}

class StudentDictionaryComparer : IEqualityComparer<KeyValuePair<int,Student>>
{
    public bool Equals(KeyValuePair<int, Student> x, KeyValuePair<int, Student> y)
    {
        if (x.Key == y.Key && (x.Value.StudentID == y.Value.StudentID) && (x.Value.StudentName == y.Value.StudentName))
            return true;

        return false;
    }

    public int GetHashCode(KeyValuePair<int, Student> obj)
    {
        return obj.Key.GetHashCode();
    }
}

class Program
{

    static void Main(string[] args)
    {
        IDictionary<int, Student> studentDict = new Dictionary<int, Student>()
                    {
                        { 1, new Student(){ StudentID =1, StudentName = "Bill"}},
                        { 2, new Student(){ StudentID =2, StudentName = "Steve"}},
                        { 3, new Student(){ StudentID =3, StudentName = "Ram"}}
                    };

        Student std = new Student(){ StudentID = 1, StudentName = "Bill"};

        KeyValuePair<int, Student> elementToFind = new KeyValuePair<int, Student>(1, std);

        bool result = studentDict.Contains(elementToFind, new StudentDictionaryComparer()); // returns true
    
        Console.WriteLine(result);
    }
}

运行结果:

true

在上面的例子中,我们使用了StudentDictionaryComparer,它导出IEqualityComparer来比较字典中的Student对象。 默认比较器将只适用于原始数据类型。


删除字典中的元素:

使用Remove()方法从字典中删除现有项目。 Remove()有两个重载,一个重载方法接受一个键,另一个重载方法接受一个KeyValuePair <>作为参数。

Remove()签名:

  • bool Remove(TKey键)

  • bool Remove(KeyValuePair <TKey,TValue>)

相关实例:

Dictionary<int, string> dict = new Dictionary<int, string>()
                                            {
                                                {1,"One"},
                                                {2, "Two"},
                                                {3,"Three"}
                                            };

dict.Remove(1); // removes the item which has 1 as a key

键和值必须匹配才能删除项。 如果两者不匹配,则不会删除该项目。 例如,以下示例不会删除任何项目:

相关实例:

// removes nothing because value One1 is not matching
dict.Remove(new KeyValuePair<int, string>(2, "Two1"));
要点

词典存储键值对,其中键必须是唯一的。 

在将KeyValuePair添加到字典之前,请使用ContainsKey()方法检查该键是否不存在。 

使用TryGetValue()方法获取键的值,以避免可能的运行时异常。 

使用foreach或for循环来迭代字典。 

使用字典索引器访问单个项目。 

使用导出IEqualityComparer的自定义类来与Contains()方法比较自定义类的对象。


版权声明:本站所有教程均为本站原创或翻译,转载请注明出处,请尊重他人劳动果实。请记住本站地址:www.yuanjiaocheng.net (猿教程) 作者:卿文刚
本文标题: C#环境
本文地址:http://www.yuanjiaocheng.net/CSharp/csharp-generic-dictionary.html