你目前正处于脱机状态,正在等待 Internet 重新连接

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

重要说明:本文是由 Microsoft 机器翻译软件进行的翻译并可能由 Microsoft 社区通过社区翻译机构(CTF)技术进行后期编辑,或可能是由人工进行的翻译。Microsoft 同时向您提供机器翻译、人工翻译及社区后期编辑的文章,以便对我们知识库中的所有文章以多种语言提供访问。翻译的文章可能存在词汇、句法和/或语法方面的错误。Microsoft 对由于内容的误译或客户对内容的使用所导致的任何不准确、错误或损失不承担责任。

点击这里察看该文章的英文版: 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. 单击清除。请注意哈希表集合中清除所有项目。
注意示例公司、 组织、 产品、 域名、 电子邮件地址、 徽标、 人物、 地点和本文档中提及的事件均属虚构。无意与任何真实的公司、 组织、 产品、 域名、 电子邮件地址、 徽标、 人、 地点或事件无关,也应将这方面的推断。

警告:本文已自动翻译

属性

文章 ID:309357 - 上次审阅时间:05/25/2013 08:31:00 - 修订版本: 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
反馈