如何在 C# 中获取 HashTable 的键?


HashTable 是 C# 中一个非泛型集合。它存储键值对,类似于泛型“Dictionary”集合。HashTable 定义在 System.Collections 命名空间中。

HashTable 由键值对组成,其中每个键都计算为一个哈希码,并在内部存储在不同的桶中。每次访问 HashTable 时,都会将此哈希码与指定键的哈希码进行匹配,从而访问相应的数值。这种机制优化了 HashTable 中的查找。

现在让我们讨论如何在 C# 中获取 HashTable 的键。

如何从 HashTable 获取键?

我们可以使用两种方法从哈希表中获取键。

  • 使用 for-each 循环并通过迭代哈希表来访问键

  • 从哈希表中检索键的集合并逐个显示它们。

让我们使用示例演示这两种方法。

使用 For-Each 循环从 HashTable 获取键

在这种方法中,我们声明一个包含键值对的哈希表。然后使用 for-each 循环显示哈希表中的键。

为了以编程方式实现这一点,我们将使用以下哈希表。

{“US", "New York"}
{"FR", "Paris"}
{"UK", "London"}
{"IN", "Mumbai"}
{"GER", "Berlin"}

上述哈希表以国家代码作为键,以其对应的重要城市作为值。

如果上述哈希表称为 Citytable,则我们使用 DictionaryEntry 迭代器如下访问其键:

foreach(DictionaryEntry ele1 in Citytable){
        Console.WriteLine("{0}", ele1.Key);

此代码将显示哈希表中的每个键。

示例 1

此方法的完整工作程序如下所示:

using System;
using System.Collections;
class MyHashTable {
   // Main Method
   static public void Main() {
    
      // Create a hashtable instance
      Hashtable Citytable = new Hashtable();
      
      // Adding key/value pair in the hashtable using Add() method
      Citytable.Add("US", "New York");
      Citytable.Add("FR", "Paris");
      Citytable.Add("UK", "London");
      Citytable.Add("IN", "Mumbai");
      Citytable.Add("GER", "Berlin");
      
      //Print hashtable keys
      Console.WriteLine("Citytable Keys:");
      foreach(DictionaryEntry ele1 in Citytable){
         Console.WriteLine("{0}", ele1.Key);
      }      
   }
}

在此程序中,我们声明并定义了一个名为 Citytable 的哈希表,其中包含国家代码及其重要城市分别作为键值对。使用 Add() 方法填充哈希表的值后,我们启动一个 for-each 循环,该循环使用类型为 DictionaryEntry 的迭代器“ele1”来迭代 Citytable。然后,对于每次迭代,都会打印键值。

输出

Citytable Keys:
FR
US
IN
GER
UK

如我们所见,输出中仅显示了 Citytable 的键。这是最常见的方法,因为我们大多使用 for-each 循环来显示任何集合或数组的内容。

我们可以稍微修改上述程序,并使其显示给定键的对应值。

为此,我们必须对迭代循环进行以下更改。

foreach(DictionaryEntry ele1 in Citytable){
   Console.WriteLine("{0} = {1}", ele1.Key, ele1.Value);

在上面的代码中,我们现在还打印了迭代计数器的 Value 部分。

示例 2

此修改的完整程序如下所示:

using System;
using System.Collections;
class MyHashTable {
   // Main Method
   static public void Main() {
    
      // Create a hashtable instance
      Hashtable Citytable = new Hashtable();
      
      // Adding key/value pair in the hashtable using Add() method
      Citytable.Add("US", "New York");
      Citytable.Add("FR", "Paris");
      Citytable.Add("UK", "London");
      Citytable.Add("IN", "Mumbai");
      Citytable.Add("GER", "Berlin");
      
      //Print hashtable keys
      Console.WriteLine("Citytable Keys:");
      foreach(DictionaryEntry ele1 in Citytable){
         Console.WriteLine("{0} = {1}", ele1.Key, ele1.Value);
      }      
   }
}

输出

Citytable Keys:
FR = Paris
US = New York
IN = Mumbai
GER = Berlin
UK = London

因此,这里我们显示了 Citytable 的键值对。

让我们继续下一个方法。

使用集合

在这种方法中,我们首先使用集合从 Hashtable 获取键的集合,然后打印这些键。键作为字符串值打印,这些字符串值只不过是集合的元素。

让我们以编程语言的哈希表为例。

{"CPP", "C++"}
{"CS", "C#"}
{"JAVA", "JAVA"}
{"PL", "PERL"}
{"JS", "JAVASCRIPT"}

我们在程序中将上述表定义为哈希表 Langtable。然后,我们声明一个 ICollection 对象“keys”,并将哈希表键收集到此对象中。

ICollection keys = Langtable.Keys;

一旦我们获得了键集合,我们就可以轻松地遍历此集合并显示每个键作为字符串。

foreach (String k in keys){
   Console.WriteLine(k);
}

通过这种方式,我们可以单独显示哈希表中的每个键。

示例

此方法的完整程序在此给出。

using System;
using System.Collections;
class MyHashTable {
   // Main Method
   static public void Main() {
    
      // Create a hashtable instance
      Hashtable Langtable = new Hashtable();
      
      // Adding key/value pair in the hashtable using Add() method
      Langtable.Add("CPP", "C++");
      Langtable.Add("CS", "C#");
      Langtable.Add("JAVA", "JAVA");
      Langtable.Add("PL", "PERL");
      Langtable.Add("JS", "JAVASCRIPT");
      
      //Collection of Hashtable keys
      ICollection keys = Langtable.Keys;

      Console.WriteLine("Language Keys:");
      foreach (String k in keys){
         Console.WriteLine(k);
      }
      Console.ReadKey();
   }
}

如前所述,上述程序包含一个编程语言的哈希表,其中语言代码作为键,其名称作为值。我们首先使用 ICollection 对象从哈希表中检索键的集合。然后,我们遍历此对象并逐个显示键。

输出

Language Keys:
PL
JS
CS
JAVA
CPP

因此,程序显示了哈希表的语言代码(键)。同样,如果我们想要每个键的对应值,我们可以通过使用给定键访问哈希表来打印它。我们将此修改留给读者。

因此,我们可以使用我们上面讨论的两种方法中的任何一种来获取(**访问**)哈希表中的哈希表键。尽管这两种方法都很简单,但对于大多数集合,我们大多使用第一种方法,即使用 for-each 循环遍历哈希表。

在后续文章中,我们将讨论更多可以在 C# 中执行的 HashTable 操作。

更新于: 2022-12-14

226 次浏览

开启您的 职业生涯

通过完成课程获得认证

开始学习
广告