HashTable 集合和键值对
在 C# 中,HashTable 是一种基于哈希表的集合类型。哈希表是一种可以快速查找数据的数据结构,通过哈希函数计算索引值,从而将数据存储在数组中。在 HashTable 集合中,每个元素存储了一个键值对,键与值一一对应。
即键值对的一个重要特点是:通过键可以快速查找到对应的值。
使用 HashTable 集合时,首先需要创建一个新的实例,然后添加键值对。可以使用任何类型的对象作为键或值(但需要实现相应的接口,比如 IEquatable、IHashCode),一般情况下使用 string 类型的键最为常见,因为它可以作为索引的基础数据类型。
Hashtable hashtable = new Hashtable();
hashtable.Add("name", "Tom");
hashtable.Add("age", 18);
hashtable.Add("gender", "Male");
使用指定键获取值
使用 HashTable 集合中的方法或属性,可以通过指定键获取与之对应的值。当指定的键不存在于集合中时,会返回 null 值。
使用索引器获取值
可以使用类似数组的索引器语法访问 HashTable 集合中的元素,即通过键访问对应的值。如果该键不存在,则返回 null 值。
string name = (string)hashtable["name"]; // "Tom"
int? weight = (int?)hashtable["weight"]; // null
需要注意的是:键的类型和值的类型不一定完全匹配,因此需要使用强制类型转换。
使用 ContainsKey 方法检测键是否存在
通过 HashTable 集合的 ContainsKey 方法可以检测指定的键是否存在于集合中。如果存在,返回 true,否则返回 false。
bool hasName = hashtable.ContainsKey("name"); // true
bool hasWeight = hashtable.ContainsKey("weight"); // false
使用 TryGetValue 方法尝试获取值
如果想要安全地获取 HashTable 集合中的值,可以使用 TryGetValue 方法。该方法会尝试获取指定键对应的值,如果存在则将其设置为输出参数,并返回 true,否则返回 false 。
string name;
bool hasName = hashtable.TryGetValue("name", out name); // true, name = "Tom"
int weight;
bool hasWeight = hashtable.TryGetValue("weight", out weight); // false, weight = 0
需要注意的是:TryGetValue 方法的第二个参数是一个输出参数,因此必须在方法调用前将其设置为类型的默认值。
总结
使用指定键从 HashTable 集合中获取值是用于快速查找元素的一个重要特点,这也是 HashTable 集合的一大优势。当需要从集合中获取值时,可以通过使用索引器、ContainsKey 方法或 TryGetValue 方法来实现。