如何在 Visual C# 中使用哈希表集合

文章翻译 文章翻译
文章编号: 309357 - 查看本文应用于的产品
这篇文章的 Microsoft Visual Basic.NET 版本,请参阅 307933.
展开全部 | 关闭全部

本文内容

概要

本分步指南介绍了如何使用哈希表集合。因为哈希不需要代价高昂的数据搜索来检索数据,可以使用哈希来有效地检索数据。哈希使用密钥本身的值来查找数据。

基类库提供的哈希表类的System.Collections命名空间中定义,因此,您不需要编写自己的哈希表的代码。

生成示例的步骤

哈希表集合存储(键中的值)的对,并使用该密钥进行哈希处理和获得的存储位置。是不可变的并且不能有重复的项在哈希表。此示例使用一个简单的用户类的多个实例存储在哈希表中。最后一个名称用作
  1. 打开 Microsoft Visual Studio,并创建一个 Windows 窗体应用程序项目中 Visual C#。默认情况下,Form1 添加到项目中。
  2. 在解决方案资源管理器中,右击项目名称,指向添加,然后单击以添加类模块。默认情况下,Class1 添加到项目中。
  3. 将 Class1 模块中的任何代码替换为以下代码:
     public class Person
    {
    	public string Fname, Lname;
    
    	public Person(string FirstName, string LastName)
    	{
    		Fname = FirstName;
    		Lname = LastName;
    	}
    
    	public override string ToString()
    	{
    		return Fname + " " + Lname;
    	}
    }
    						
    Person类具有一个构造函数采用名字字段姓氏的参数,并将这些参数分配给局部变量。ToString函数重写ToString ,从对象类以返回FnameLname串联在一起。
  4. 创建窗体级哈希表对象,并声明类型人员的三个变量。将下面的代码添加到 Form1 类中:
    <?xm-deletion_mark author="v-bobbid" time="20080711T172143-0800" data="private Hashtable MyTable = new Hashtable();
    		
    //For simplicity, create three Person objects to add to the HashTable collection.
    
    Person Person1,Person2,Person3; "?><?xm-insertion_mark_start author="v-bobbid" time="20080711T172143-0800"?>System.Collections.Hashtable MyTable = new 
    System.Collections.Hashtable();
    
    //For simplicity, create three Person objects to add to the HashTable collection.
    
    Person Person1,Person2,Person3; 
    <?xm-insertion_mark_end?>
    					
  5. 在以下步骤中,使用哈希表对象的Add方法将三个Person对象添加到哈希表的 try-catch块中。Try-catch块捕获异常并显示一条消息,如果存在重复的键:
    1. 放置在 Form1 上,按钮控件并更改到文本属性 添加项.
    2. 双击该按钮以打开代码窗口,并在Button1_Click事件中粘贴以下代码:
      Person1 = new Person("David", "Burris");
      Person2 = new Person("Johnny", "Carrol");
      Person3 = new Person("Ji", "Jihuang");
      
      //The Add method takes Key as the first parameter and Value as the second parameter.
      
      try
      {
              MyTable.Add(Person1.Lname, Person1);
      	MyTable.Add(Person2.Lname, Person2);
      	MyTable.Add(Person3.Lname, Person3);
      				
      }
      catch (ArgumentException ae)
      {
      	MessageBox.Show("Duplicate Key");
      	MessageBox.Show(ae.Message);
      }
      						
  6. 哈希表对象提供的索引器。在下列步骤中,使用来访问存储在哈希的位置的值的索引:
    1. 按钮控件添加到 Form1,然后更改为名称属性 获取项.
    2. 双击该按钮,并在Button2_Click事件中粘贴以下代码:
      //Use the indexer of the Hashtable class to retrieve your objects. The indexer takes 
      //Key as a parameter and accesses it with the Hashed location.
      
      try
      {
              MessageBox.Show(MyTable[Person1.Lname].ToString());
      	MessageBox.Show(MyTable[Person2.Lname].ToString());
      	MessageBox.Show(MyTable[Person3.Lname].ToString());
      }
      catch (NullReferenceException ex)
      {
      	MessageBox.Show("Key not in Hashtable");
      	MessageBox.Show(ex.Message);
      } 
      						
  7. 在以下步骤中,使用Remove方法从哈希表集合中移除一个项目:
    1. 按钮控件添加到 Form1,然后更改到文本属性 移除项.
    2. 双击该按钮,然后在Button3_Click事件中粘贴以下代码:
      <?xm-deletion_mark author="v-bobbid" time="20080711T173011-0800" data="if (MyTable.Count == 0) 
      {
      	MessageBox.Show(&quot;There are no items in HashTable&quot;);
      }
      else
      {
              MessageBox.Show(&quot;The count before removing an Item is&quot; + &quot; &quot; + MyTable.Count);
              MessageBox.Show(&quot;Removing value stored at key value (Burris)&quot;);
              Remove the object that is stored at the Key value Person1.Lname.
              MyTable.Remove(Person1.Lname);
      }"?><?xm-insertion_mark_start author="v-bobbid" time="20080711T173011-0800"?>if (MyTable.Count == 0) 
      {
          MessageBox.Show("There are no items in HashTable");
      }
      else
      {
              MessageBox.Show("The count before removing an Item is" + " " + MyTable.Count);
              MessageBox.Show("Removing value stored at key value (Burris)");
              // Remove the object that is stored at the Key value Person1.Lname.
              MyTable.Remove(Person1.Lname);
      } 
      <?xm-insertion_mark_end?>
      						
  8. 在以下步骤中,枚举存储在哈希表集合中的项:
    1. 按钮控件添加到 Form1,然后更改到文本属性 枚举.
    2. 双击该按钮,然后在Button4_Click事件中粘贴以下代码:
      <?xm-deletion_mark author="v-bobbid" time="20080711T174252-0800" data="IDictionaryEnumerator Enumerator;
      
      if (MyTable.Count == 0)
      	MessageBox.Show(&quot;The hashtable is empty&quot;);
      else
      {
      	MessageBox.Show(&quot;Enumerating through the Hashtable collection&quot;);
      	Enumerator = MyTable.GetEnumerator();
              
              while (Enumerator.MoveNext())
      	{
      	        MessageBox.Show(Enumerator.Value.ToString());
      	}
      }
      
      ICollection MyKeys;
           
      
      if (MyTable.Count == 0) 
             MessageBox.Show(&quot;The hashtable is empty&quot;);
      else
      {
             MessageBox.Show(&quot;Accessing keys property to return keys collection&quot;);
             MyKeys = MyTable.Keys;
      
             foreach (object Key in MyKeys)
             {
      		MessageBox.Show(Key.ToString());
             }								   
      } 
      							"?><?xm-insertion_mark_start author="v-bobbid" time="20080711T174252-0800"?>System.Collections.IDictionaryEnumerator Enumerator;
      
      if (MyTable.Count == 0)
          MessageBox.Show("The hashtable is empty");
      else
      {
          MessageBox.Show("Enumerating through the Hashtable collection");
          Enumerator = MyTable.GetEnumerator();
      
          while (Enumerator.MoveNext())
          {
              MessageBox.Show(Enumerator.Value.ToString());
          }
      }
      
      System.Collections.ICollection MyKeys;
      
      
      if (MyTable.Count == 0)
          MessageBox.Show("The hashtable is empty");
      else
      {
          MessageBox.Show("Accessing keys property to return keys collection");
          MyKeys = MyTable.Keys;
      
          foreach (object Key in MyKeys)
          {
              MessageBox.Show(Key.ToString());
          }
      }  
      <?xm-insertion_mark_end?>
      此代码声明类型为IDictionaryEnumerator的变量,并调用GetEnumerator方法的哈希表集合。与返回的枚举数,该代码枚举集合中的项,并使用哈希表方法以枚举所有项。
  9. 在以下步骤中,使用Clear方法清除哈希表
    1. 按钮控件添加到 Form1,然后更改到文本属性 清除.
    2. 双击该按钮,然后在Button5_Click事件中粘贴以下代码:
      MyTable.Clear();
            MessageBox.Show("HashTable is now empty");
      						
  10. 请按照这些步骤以生成并运行该应用程序:
    1. 单击添加项目。请注意三个Person对象添加到哈希表集合。
    2. 单击获取的项目。请注意,索引器获取哈希表集合中的项。这三个新添加的项显示。
    3. 单击删除项目。请注意"Burris"关键位置处的项,并将被删除。
    4. 单击枚举。注意IDictionaryEnumerator通过哈希表集合中项的枚举,该哈希表的属性返回键集合。
    5. 单击清除。请注意哈希表集合中清除所有项目。
注意示例公司、 组织、 产品、 域名、 电子邮件地址、 徽标、 人物、 地点和本文档中提及的事件均属虚构。无意与任何真实的公司、 组织、 产品、 域名、 电子邮件地址、 徽标、 人、 地点或事件无关,也应将这方面的推断。

属性

文章编号: 309357 - 最后修改: 2013年5月25日 - 修订: 5.0
这篇文章中的信息适用于:
  • Microsoft Visual C# 2008 Express Edition
  • Microsoft Visual C# 2005
  • Microsoft Visual C++ .NET 2003 Standard Edition
  • Microsoft Visual C# .NET 2002 标准版
关键字:?
kbhowtomaster kbmt KB309357 KbMtzh
机器翻译
重要说明:本文是由 Microsoft 机器翻译软件进行的翻译并可能由 Microsoft 社区通过社区翻译机构(CTF)技术进行后期编辑,或可能是由人工进行的翻译。Microsoft 同时向您提供机器翻译、人工翻译及社区后期编辑的文章,以便对我们知识库中的所有文章以多种语言提供访问。翻译的文章可能存在词汇、句法和/或语法方面的错误。Microsoft 对由于内容的误译或客户对内容的使用所导致的任何不准确、错误或损失不承担责任。
点击这里察看该文章的英文版: 309357
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com