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 |
Ones |
10 |
Tens |
100 |
Hundred |
1000 |
Thousand |
本示例的完整程序如下所示。
using System; using System. Collections; class MyHashTable { // Main Method static public void Main() { // 使用默认构造函数创建哈希表 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 的内容。
因此,使用一个简单的循环并遍历哈希表,我们可以用另一个哈希表替换一个哈希表的项目。