如何使用 HashTable 集合在 Visual C# 中

文章翻譯 文章翻譯
文章編號: 309357 - 檢視此文章適用的產品。
本文章的有 Microsoft Visual Basic.NET] 版本請參閱 307933
全部展開 | 全部摺疊

在此頁中

結論

本文將逐步告訴您如何使用 HashTable 集合。因為雜湊不需要昂貴搜尋資料的擷取資料,您可以使用雜湊來有效地擷取資料。雜湊找不到資料的使用金鑰本身的值。

基底類別庫提供,以使您不需要程式碼的雜湊資料表,System.Collections 命名空間中定義的 HashTable 類別。

若要建置範例的步驟

HashTable 集合會儲存 索引鍵 (數值) 組,並使用 金鑰 雜湊和取得儲存位置。金鑰 是不變,而在 HashTable 中不能有重複的項目。這個範例使用簡單的 類別的幾個執行個體將儲存在 HashTable。最後一個名稱當作 索引鍵
  1. 開啟 Microsoft Visual Studio 並建立一個 Windows Form 應用程式專案在 Visual C# 中。Form1 是根據預設值加入至專案。
  2. 在 [方案總管] 中以滑鼠右鍵按一下專案名稱,並指向 [新增,然後按一下 [加入類別模組的 類別。類別 1 加入至專案上,根據預設值。
  3. 在 [類別 1] 模組中任何程式碼取代下列程式碼:
     public class Person
    {
    	public string Fname, Lname;
    
    	public Person(string FirstName, string LastName)
    	{
    		Fname = FirstName;
    		Lname = LastName;
    	}
    
    	public override string ToString()
    	{
    		return Fname + " " + Lname;
    	}
    }
    						
    人員] 類別有一個建構函式,[名字] 和 [姓氏] 使用參數,然後將這些參數指派給本機變數。ToString 函式中,會覆寫 ToString物件 類別來傳回 FnameLname 串連在一起。
  4. 建立表單層級 Hashtable 物件並宣告三個變數的型別 人員。將下列程式碼加入至 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. 下列步驟中使用 [將三個 人員 物件新增至 Hashtabletry-catch 區塊中的 [Hashtable 物件的 Add 方法]。在 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. Hashtable 物件提供索引子。在下列步驟以存取儲存在雜湊位置的值的 索引鍵 的索引:
    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 方法從 HashTable 集合移除單一項目:
    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. 下列步驟中列舉儲存在 HashTable 集合中的項目:
    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 方法 HashTable 集合。列舉值 傳回,與程式碼列舉集合中項目,並使用 HashTable機碼 方法來列舉機碼。
  9. 在下列步驟使用 [清除] 方法來清除 HashTable
    1. 按鈕 控制項加入至 Form1,並將 文字 屬性變更為 清除
    2. 按兩下該按鈕,並將下列程式碼貼上 Button5_Click 事件:
      MyTable.Clear();
            MessageBox.Show("HashTable is now empty");
      						
  10. 請依照下列步驟執行以建置並執行應用程式:
    1. 按一下 [新增項目。注意三個 人員 物件會加入至 HashTable 集合。
    2. 按一下 [取得的項目。請注意這個索引子會取得 HashTable 集合中的項目。其中三個新加入的項目會顯示。
    3. 按一下 [移除項目]。請注意在 Burris 」 索引鍵位置項目被刪除。
    4. 按一下 [列舉]。請注意 IDictionaryEnumerator 列舉經由 HashTable] 集合中項目 索引鍵 屬性的 [HashTable 傳回索引鍵集合。
    5. 按一下 [清除]。請注意所有項目會從 HashTable 集合清除。
附註範例公司、 組織、 產品、 網域名稱、 電子郵件地址、 標誌、 人員、 地方及此處所描述之事件均屬虛構。沒有與任何真實的公司、 組織、 產品、 網域名稱、 電子郵件地址、 標誌、 人員、 地方或事件是影射應該是。

屬性

文章編號: 309357 - 上次校閱: 2008年7月15日 - 版次: 4.0
這篇文章中的資訊適用於:
  • Microsoft Visual C# 2008 Express Edition
  • Microsoft Visual C# 2005
  • Microsoft Visual C++ .NET 2003 Standard Edition
  • Microsoft Visual C# .NET 2002 Standard Edition
關鍵字:?
kbmt kbhowtomaster KB309357 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。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