C#中哈希表(HashTable)用法实例详解
哈希表(HashTable)是一种使用哈希算法实现的数据结构,它能在平均情况下以常数时间复杂度进行基本操作(添加、删除、查找)。
在C#中,哈希表可以用System.Collections.Hashtable
类实现。本文将详细介绍哈希表在C#中的用法,包括添加、移除、判断、遍历、排序等。
添加元素
使用哈希表添加元素时,可以直接通过Add
方法添加键值对,例如:
Hashtable ht = new Hashtable();
ht.Add("key1", "value1");
ht.Add("key2", "value2");
上面的代码中,我们创建了一个空的哈希表ht
,并使用Add
方法向其中添加了两个键值对,分别是"key1"和"value1",以及"key2"和"value2"。
移除元素
使用哈希表移除元素时,可以通过Remove
方法或者Clear
方法实现。
Remove
方法可以根据指定的键来移除键值对,例如:
ht.Remove("key1");
上面的代码中,我们使用Remove
方法将键为"key1"的键值对从哈希表中移除。
另外,也可以通过Clear
方法来移除哈希表中的所有键值对,例如:
ht.Clear();
上面的代码中,我们使用Clear
方法将哈希表ht
中的所有键值对全部移除。
判断元素是否存在
使用哈希表判断元素是否存在时,可以通过ContainsKey
方法或者ContainsValue
方法实现。
ContainsKey
方法可以根据指定的键来判断是否存在对应的键值对,例如:
bool exist1 = ht.ContainsKey("key1");
上面的代码中,我们使用ContainsKey
方法判断哈希表ht
中是否存在键为"key1"的键值对,并将结果存储在exist1
中。
另外,也可以通过ContainsValue
方法来判断哈希表中是否存在指定的值,例如:
bool exist2 = ht.ContainsValue("value2");
上面的代码中,我们使用ContainsValue
方法判断哈希表ht
中是否存在值为"value2"的键值对,并将结果存储在exist2
中。
遍历元素
使用哈希表遍历元素时,可以使用foreach
循环遍历键值对。
foreach (DictionaryEntry de in ht)
{
Console.WriteLine("Key = {0}, Value = {1}", de.Key, de.Value);
}
上面的代码中,我们使用foreach
循环遍历哈希表ht
中的所有键值对,并将每个键值对的键和值打印出来。
排序元素
C#中的哈希表本质上是无序的,因此无法使用内置的排序方法对其进行排序。但是,我们可以使用Linq来对哈希表进行排序。例如:
Hashtable ht = new Hashtable();
ht.Add("key1", 5);
ht.Add("key2", 2);
ht.Add("key3", 8);
var sorted = from p in ht.Cast<DictionaryEntry>()
orderby p.Value ascending
select p;
foreach (var item in sorted)
{
Console.WriteLine(item.Key + " - " + item.Value);
}
上面的代码中,我们使用Cast
方法将哈希表ht
转换成IEnumerable<DictionaryEntry>
类型,然后使用Linq的orderby
方法按照键值对的值进行升序排序,最后通过foreach
循环遍历输出排序后的结果。
示例说明
以下是两个关于哈希表的用例,用于说明它在实际中的用法。
示例1:统计单词出现次数
string text = "apple apple banana orange banana apple";
string[] words = text.Split(' ');
Hashtable ht = new Hashtable();
foreach (string word in words)
{
if (ht.ContainsKey(word))
ht[word] = (int)ht[word] + 1;
else
ht[word] = 1;
}
foreach (DictionaryEntry de in ht)
{
Console.WriteLine("Word = {0}, Count = {1}", de.Key, de.Value);
}
上面的代码中,我们首先将一个字符串分割成单词数组,然后使用哈希表统计每个单词出现的次数。最后,我们遍历整个哈希表并输出单词和相应的计数。
示例2:查找缺失的数字
int[] nums = { 2, 0, 4, 3, 5, 6 };
int sum = 0;
Hashtable ht = new Hashtable();
foreach (int n in nums)
{
ht[n] = n;
sum += n;
}
int missingNum = 21 - sum;
if (ht.ContainsKey(missingNum))
Console.WriteLine("Missing number is: {0}", missingNum);
上面的代码中,我们有一组整数数组nums
,其中有一个数字缺失。我们可以先将所有数字都添加到哈希表中,然后计算出这组数字的总和,并通过总和和应有的总和求得缺失的数字。最后,我们在哈希表中查找该数字是否存在,如果存在则输出它。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#中哈希表(HashTable)用法实例详解(添加/移除/判断/遍历/排序等) - Python技术站