C#程序替换一个哈希表中的项目为另一个哈希表
C# 中的哈希表集合是一个非泛型集合,包含键值对,这些键值对根据键的哈希码进行组织。键用于访问哈希表集合中的元素。哈希帮助我们有效地检索数据,并避免了代价高昂的数据搜索技术。哈希技术使用键本身来定位数据。这个哈希表键是不可变的,并且不允许在哈希表中出现重复项。
Hashtable 类在 System.Collections 命名空间中定义,为 C# 中的哈希表集合提供了基础类库。此 Hashtable 类用于创建使用哈希表进行存储的键值对集合。通过计算键的哈希码并将其存储在另一个内部篮子中,可以优化对特定键的查找。当我们从哈希表访问值时,它会将哈希码与指定的键进行匹配。
在本教程中,我们将讨论一种用另一个哈希表替换一个哈希表中的项目或元素的方法。
如何用另一个哈希表替换一个哈希表中的项目?
上面讨论的 Hashtable 类提供了用于创建 Hashtable 对象的构造函数以及用于添加、删除元素以及检查元素或键或值是否出现在哈希表中的方法。它还提供了一些属性来检查哈希表是否为空、计算哈希表中的元素数量等。
但它不允许我们的方法用另一个哈希表替换整个哈希表中的项目。我们可以通过替换其值来替换单个项目。
要将整个哈希表内容替换为另一个哈希表的内容,我们通常会遍历第二个哈希表,并将第一个哈希表的内容替换为第二个哈希表的内容。
我们将使用下面所示的方法。
foreach (DictionaryEntry item in secondHashtable) { firstHashtable[item.Key] = item.Value; Console.WriteLine("{0} ({1}) ", item.Key, item.Value); }
这里我们首先遍历第二个哈希表,然后用第二个哈希表的每个键值对替换第一个哈希表的每个键值对。
示例
实现此方法的完整程序如下所示。
using System; using System. Collections; class MyHashTable { // Main Method static public void Main() { // Create hashtable using the default constructor Hashtable indianNumberSystem = new Hashtable(); //add a key/value pair using the Add() method indianNumberSystem.Add(1,"Ones"); indianNumberSystem.Add(10,"Tens"); indianNumberSystem.Add(100,"Hundred"); indianNumberSystem.Add(1000,"Thousand"); Console.WriteLine("Contents of indianNumberSystem hashtable:"); foreach(DictionaryEntry ele1 in indianNumberSystem){ Console.WriteLine("{0} ({1}) ", ele1.Key, ele1.Value); } Hashtable langCodes = new Hashtable(); langCodes.Add("C++","CPlusPlus"); langCodes.Add("C#","CSharp"); langCodes.Add("Java","Java"); langCodes.Add("PL","Perl"); Console.WriteLine("
Contents of langCodes Hashtable:"); foreach(DictionaryEntry ele1 in langCodes){ Console.WriteLine("{0} ({1}) ", ele1.Key, ele1.Value); } Console.WriteLine("
After Replacing with langCodes, indianNumberSystem: "); foreach (DictionaryEntry item in langCodes) { indianNumberSystem[item.Key] = item.Value; Console.WriteLine("{0} ({1}) ", item.Key, item.Value); } } }
这里我们有两个哈希表,indianNumberSystem 和 langCodes。我们用值填充这两个哈希表,然后显示其内容。然后我们遍历 langCodes 哈希表,并用 langCodes 哈希表的每个元素替换 indianNumberSystem 哈希表的每个元素。
此程序的输出如下所示。
输出
Contents of indianNumberSystem hashtable: 1000 (Thousand) 10 (Tens) 100 (Hundred) 1 (Ones) Contents of langCodes Hashtable: Java (Java) C# (CSharp) PL (Perl) C++ (CPlusPlus) After Replacing with langCodes, indianNumberSystem: Java (Java) C# (CSharp) PL (Perl) C++ (CPlusPlus)
从输出中我们可以看到,替换后 indianNumberSystem 的内容被 langCodes 的内容替换。
示例
现在让我们看看下一个示例。
在这个示例中,我们仍然有两个哈希表,indianNumberSystem 和 numSys。这里我们不填充哈希表 indianNumberSystem。我们只是创建一个对象。numSys 哈希表使用 Add 方法添加了以下值。
1 |
个位 |
10 |
十位 |
100 |
百位 |
1000 |
千位 |
此示例的完整程序如下所示。
using System; using System. Collections; class MyHashTable { // Main Method static public void Main() { // Create hashtable using the default constructor Hashtable indianNumberSystem = new Hashtable(); Hashtable numSys = new Hashtable(); numSys.Add(1,"Ones"); numSys.Add(10,"Tens"); numSys.Add(100,"Hundred"); numSys.Add(1000,"Thousand"); Console.WriteLine("
Contents of numSys Hashtable:"); foreach(DictionaryEntry ele1 in numSys){ Console.WriteLine("{0} ({1}) ", ele1.Key, ele1.Value); } Console.WriteLine("
After Replacing with numSys, indianNumberSystem: "); foreach (DictionaryEntry item in numSys) { indianNumberSystem[item.Key] = item.Value; Console.WriteLine("{0} ({1}) ", item.Key, item.Value); } } }
这里我们使用与第一个程序相同的方法,唯一的区别是第一个哈希表为空。然后我们直接替换或移动第二个哈希表中的项目到第一个哈希表中。
输出
此程序的输出如下所示。
Contents of numSys Hashtable: 1000 (Thousand) 10 (Tens) 100 (Hundred) 1 (Ones) After Replacing with numSys, indianNumberSystem: 1000 (Thousand) 10 (Tens) 100 (Hundred) 1 (Ones)
如程序输出所示,numSys 表的内容现在是 indianNumberSystem 的内容。
因此,使用简单的循环并遍历哈希表,我们可以用另一个哈希表替换一个哈希表中的项目。