1. 什么是键值对
在计算机科学中,键值对通常是指将一个Key(键)
与一个Value(值)
相关联的数据结构。在编程中,用来处理映射关系的数据结构主要就是键值对。
键值对在程序中有着非常重要的应用,如字典、散列表、数据库等。其中字典的实现中就采用了键值对的存储方式。
2. C# 中键值对的使用
2.1. Dictionary 类
Dictionary<Tkey,TValue>
是 .NET 框架中的一个泛型类,实现了一系列与键相关的操作。该类中使用一对一的形式,将一个TKey
类型的键与一个TValue
类型的值关联起来。我们可以使用键来访问和检索值。
下面的例子演示了如何声明并使用Dictionary类:
Dictionary<string, string> country = new Dictionary<string, string>();
country.Add("China", "Beijing");
country.Add("USA", "Washington D.C.");
country.Add("Japan", "Tokyo");
country.Add("France", "Paris");
Console.WriteLine(country["China"]);
Console.WriteLine(country["Japan"]);
执行结果如下:
Beijing
Tokyo
注意:如果访问字典中不存在的键,则会引发KeyNotFoundException
异常。
2.2. SortedDictionary 类
与Dictionary类不同,SortedDictionary<Tkey, TValue>
是一个有序的键值对集合。该类以有序的方式维护键值对的集合,当需要对集合进行遍历或排序时,使用SortedDictionary类更加方便。
下面的例子演示如何使用SortedDictionary类:
SortedDictionary<int, string> sortedDict = new SortedDictionary<int, string>();
sortedDict.Add(3, "apple");
sortedDict.Add(4, "banana");
sortedDict.Add(2, "orange");
sortedDict.Add(1, "grape");
foreach (var item in sortedDict)
{
Console.WriteLine("{0} - {1}", item.Key, item.Value);
}
执行结果如下:
1 - grape
2 - orange
3 - apple
4 - banana
注意:SortedDictionary类的内部实现是通过使用二叉树来维护键值对的有序集合,因此在插入、查找、删除操作时的时间复杂度均为 O(log n)
。
2.3. ConcurrentDictionary 类
ConcurrentDictionary<Tkey, TValue>
是一个多线程安全的键值对集合。在多线程并发访问时,我们可以使用该类保证线程安全。
下面的例子演示了如何使用ConcurrentDictionary类:
ConcurrentDictionary<string, int> concurrentDict = new ConcurrentDictionary<string, int>();
concurrentDict.TryAdd("apple", 1);
concurrentDict.TryAdd("banana", 2);
concurrentDict.TryAdd("orange", 3);
foreach (var item in concurrentDict)
{
Console.WriteLine("{0} - {1}", item.Key, item.Value);
}
执行结果如下:
apple - 1
orange - 3
banana - 2
注意:ConcurrentDictionary类中的TryAdd()
方法是一个原子操作,可以安全地用于添加键值对的操作。
3. 总结
键值对在计算机程序设计中有着广泛的应用,在C#程序中也有着许多的类库可以供我们选择使用,如Dictionary、SortedDictionary和ConcurrentDictionary等。在使用这些类库时,我们要注意它们之间的差异和适用场景,以选择最合适的键值对集合。