Jak pracować z kolekcją HashTable w środowisku Visual C#

Tłumaczenia artykułów Tłumaczenia artykułów
Numer ID artykułu: 309357 - Zobacz jakich produktów dotyczą zawarte w tym artykule porady.
Rozwiń wszystko | Zwiń wszystko

Na tej stronie

Streszczenie

W tym artykule opisano krok po kroku sposób korzystania z kolekcji HashTable. Mieszanie pozwala skuteczniej pobierać dane, ponieważ eliminuje konieczność kosztownego wyszukiwania danych podczas ich pobierania. Podczas mieszania wartość klucza jest używana do lokalizowania danych.

Biblioteki Base Class Libraries oferują klasę HashTable definiowaną w przestrzeni nazw System.Collections, tak aby programowanie tabel mieszania przez użytkownika nie było konieczne.

Kroki tworzenia przykładu

Kolekcja HashTable przechowuje parę (klucz, wartość) i używa klucza do mieszania i uzyskania lokalizacji magazynu. Klucz jest niezmienny i nie może mieć duplikatowych wpisów w kolekcji HashTable. W tym przykładzie wykorzystano kilka wystąpień prostej klasy Person do przechowywania w kolekcji HashTable. Nazwisko jest używane jako klucz.
  1. Należy otworzyć program Microsoft Visual Studio i utworzyć projekt aplikacji systemu Windows w środowisku Visual C#. Formularz Form1 jest domyślnie dodawany do projektu.

    Uwaga: Kod powinien być zmieniony w programie Visual Studio 2005. Aby uzyskać więcej informacji, odwiedź następującą witrynę MSDN (Microsoft Developer Network) w sieci Web:
    http://msdn2.microsoft.com/en-us/library/ms173077.aspx
    Podczas tworzenia projektu formularzy systemu Windows w środowisku Visual C# pojedynczy formularz jest domyślnie dodawany do projektu. Jest to formularz o nazwie Form1. Dwa pliki reprezentujące ten formularz to Form1.cs i Form1.designer.cs. Użytkownik wpisuje swój kod w pliku Form1.cs. W pliku designer.cs narzędzie Windows Forms Designer wpisuje kod implementujący wszystkie akcje wykonywane przez użytkownika przez przeciąganie i upuszczanie formantów z Przybornika.
  2. W oknie Solution Explorer kliknij nazwę projektu prawym przyciskiem myszy, wskaż polecenie Add (Dodaj), a następnie kliknij polecenie Add Class (Dodaj klasę), aby dodać moduł Class. Moduł Class1 zostaje domyślnie dodany do projektu.
  3. Zastąp dowolny kod w module Class1 następującym kodem:
     public class Person
    {
    	public string Fname, Lname;
    
    	public Person(string FirstName, string LastName)
    	{
    		Fname = FirstName;
    		Lname = LastName;
    	}
    
    	public override string ToString()
    	{
    		return Fname + " " + Lname;
    	}
    }
    						
    Klasa Person ma pojedynczy konstruktor przyjmujący parametry FirstName (Imię) i LastName (Nazwisko) i przypisuje te parametry do zmiennych lokalnych. Funkcja ToString zastępuje element ToString z klasy Object, aby zwrócić złączone ciągi Fname i Lname.
  4. Utwórz obiekt Hashtable na poziomie formularza i zadeklaruj trzy zmienne typu Person. Dodaj następujący kod do klasy Form1:
    private Hashtable MyTable = new Hashtable();
    		
    //For simplicity, create three Person objects to add to the HashTable collection.
    
    Person Person1,Person2,Person3; 
    					
  5. W poniższych krokach użyj metody Add obiektu Hashtable w celu dodania trzech obiektów Person do obiektu Hashtable w bloku try-catch. Blok try-catch przechwytuje wyjątek i wyświetla komunikat, jeżeli istnieją duplikaty kluczy.
    1. Umieść formant Button na formularzu Form1 i zmień właściwość Text na Dodaj elementy.
    2. Kliknij dwukrotnie ten przycisk, aby otworzyć okno kodu, i wklej następujący kod w zdarzeniu 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. Obiekt Hashtable zapewnia indeksowanie. W poniższych krokach należy indeksować z kluczem w celu uzyskania dostępu do wartości przechowywanej w mieszanej lokalizacji.
    1. Dodaj formant Button do formularza Form1 i zmień właściwość Name na Pobierz elementy.
    2. Kliknij dwukrotnie ten przycisk i wklej następujący kod w zdarzeniu 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. W poniższych krokach użyj metody Remove do usunięcia pojedynczego elementu z kolekcji HashTable:
    1. Dodaj formant Button do formularza Form1 i zmień właściwość Text na Usuń element.
    2. Kliknij dwukrotnie ten przycisk i wklej następujący kod w zdarzeniu Button3_Click:
      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);
      }
      						
  8. W poniższych krokach wylicz elementy przechowywane w kolekcji HashTable.
    1. Dodaj formant Button do formularza Form1 i zmień właściwość Text na Wylicz.
    2. Kliknij dwukrotnie ten przycisk i wklej następujący kod w zdarzeniu Button4_Click:
      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());
      	}
      }
      
      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());
             }								   
      } 
      							
      Ten kod deklaruje zmienną typu IDictionaryEnumerator i wywołuje metodę GetEnumerator kolekcji HashTable. Po zwróceniu obiektu Enumerator kod wylicza elementy w kolekcji i używa metody Keys kolekcji HashTable do wyliczenia kluczy.
  9. W poniższych krokach użyj metody Clear do oczyszczenia kolekcji HashTable.
    1. Dodaj formant Button do formularza Form1 i zmień właściwość Text na Wyczyść.
    2. Kliknij dwukrotnie ten przycisk i wklej następujący kod w zdarzeniu Button5_Click:
      MyTable.Clear();
            MessageBox.Show("HashTable is now empty");
      						
  10. Wykonaj następujące kroki, aby skompilować i uruchomić aplikację:
    1. Kliknij przycisk Dodaj elementy. Zauważ, że trzy obiekty Person są dodawane do kolekcji HashTable.
    2. Kliknij przycisk Pobierz elementy. Zauważ, że podczas indeksowania uzyskiwane są elementy w kolekcji HashTable. Wyświetlane są trzy nowo dodane elementy.
    3. Kliknij przycisk Usuń element. Zauważ, że element w lokalizacji klucza „Burris” zostaje usunięty.
    4. Kliknij przycisk Wylicz. Zauważ, że obiekt IDictionaryEnumerator wylicza elementy w kolekcji HashTable, a właściwość Keys kolekcji HashTable zwraca kolekcję Keys.
    5. Kliknij przycisk Wyczyść. Zauważ, że wszystkie elementy są czyszczone z kolekcji HashTable.
UWAGA: Opisane tu przykłady firm, organizacji, produktów, nazw domen, adresów e-mail, logo, osób, miejsc i zdarzeń są fikcyjne. Ewentualny związek z rzeczywistą firmą, organizacją, produktem, nazwą domeny, adresem e-mail, logo, osobą, miejscem lub zdarzeniem jest niezamierzony i nie należy się go doszukiwać.

Właściwości

Numer ID artykułu: 309357 - Ostatnia weryfikacja: 21 kwietnia 2008 - Weryfikacja: 3.0
Informacje zawarte w tym artykule dotyczą:
  • Microsoft Visual C# 2008 Express Edition
  • Microsoft Visual C# 2005
  • Microsoft Visual C++ .NET 2003 Standard Edition
  • Microsoft Visual C# .NET 2002 Standard Edition
Słowa kluczowe: 
kbhowtomaster KB309357

Przekaż opinię

 

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