Używanie języka Visual C# do pracy z kolekcją HashTable

W tym artykule przedstawiono sposób używania kolekcji w języku HashTable Visual C#.

Oryginalna wersja produktu: Visual C#
Oryginalny numer KB: 309357

Podsumowanie

Ponieważ skrót eliminuje konieczność kosztownego wyszukiwania danych w celu pobrania danych, możesz użyć skrótu, aby efektywnie pobierać dane. Skrót używa wartości samego klucza do zlokalizowania danych.

Biblioteki klas bazowych oferują klasę zdefiniowaną HashTable w System.Collections przestrzeni nazw, dzięki czemu nie trzeba kodować własnych tabel skrótów.

Kroki tworzenia przykładu

Kolekcja HashTable przechowuje parę (Key, Value) i używa skrótu Key i uzyskania lokalizacji magazynu. Obiekt Key jest niezmienny i nie może mieć zduplikowanych wpisów w HashTablepliku . W tym przykładzie użyto kilku wystąpień prostej Person klasy do przechowywania w klasie HashTable. Nazwisko jest używane jako Key.

  1. Otwórz program Microsoft Visual Studio i utwórz projekt aplikacji Windows Forms w języku Visual C#. Formularz 1 jest domyślnie dodawany do projektu.

  2. W Eksplorator rozwiązań kliknij prawym przyciskiem myszy nazwę projektu, wskaż polecenie Dodaj, a następnie wybierz pozycję Klasa, aby dodać moduł klasy. Class1 jest domyślnie dodawany do projektu.

  3. Zastąp dowolny Class1 kod w module następującym kodem:

    public class Person
    {
        public string Fname, Lname;d
        public Person (string FirstName, string LastName)
        {
            Fname = FirstName;
            Lname = LastName;
        }
        public override string ToString ()
        {
            return Fname + " " + Lname;
        }
    }
    

    Klasa Person ma jeden konstruktor, który przyjmuje FirstName parametry i LastName i przypisuje te parametry do zmiennych lokalnych. Funkcja ToString zastępuje ToString klasę, Object aby zwracać Fname i Lname łączyć ze sobą.

  4. Utwórz obiekt na poziomie Hashtable formularza i zadeklaruj trzy zmienne typu Person. Dodaj następujący kod do Form1 klasy:

    <?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. W poniższych krokach użyj Add metody obiektu Hashtable , aby dodać trzy Person obiekty do Hashtabletry-catch bloku. Blok try-catch przechwytuje wyjątek i wyświetla komunikat, jeśli istnieją zduplikowane klucze:

    1. Umieść kontrolkę Przycisk na formularzu Form1 i zmień właściwość Text na Dodaj elementy.

    2. Kliknij dwukrotnie przycisk, aby otworzyć okno Kod, a następnie 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 udostępnia indeksator. W poniższych krokach zaindeksuj Key wartość , aby uzyskać dostęp do wartości przechowywanej w lokalizacji skrótu:

    1. Dodaj kontrolkę Przycisk do formantu Form1 i zmień właściwość Name na Pobierz elementy.

    2. Kliknij dwukrotnie 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 Remove metody , aby usunąć pojedynczy element z kolekcji HashTable :

    1. Dodaj kontrolkę Przycisk do formularza Form1 i zmień właściwość Text na Usuń element.

    2. Kliknij dwukrotnie przycisk i wklej następujący kod w zdarzeniu 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. W poniższych krokach wylicz elementy przechowywane w kolekcji HashTable :

    1. Dodaj kontrolkę Przycisk do formantu Form1 i zmień właściwość Text na Wylicz.

    2. Kliknij dwukrotnie przycisk i wklej następujący kod w zdarzeniu 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?>
      

      Ten kod deklaruje zmienną typu IDictionaryEnumerator i wywołuje GetEnumerator metodę kolekcji HashTable . Po zwróceniu Enumerator kod wylicza elementy w kolekcji i używa Keys metody metody do HashTable wyliczania za pośrednictwem kluczy.

  9. W poniższych krokach użyj metody , Clear aby wyczyścić HashTableelement :

    1. Dodaj kontrolkę Przycisk do formantu Form1 i zmień właściwość Text na Wyczyść.

    2. Kliknij dwukrotnie 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. Wybierz pozycję Dodaj elementy. Do kolekcji HashTable są dodawane trzy Person obiekty.
    2. Wybierz pozycję Pobierz elementy. Indeksator uzyskuje elementy w kolekcji HashTable . Zostaną wyświetlone trzy nowo dodane elementy.
    3. Wybierz pozycję Usuń element. Element w lokalizacji klucza Burris zostanie usunięty.
    4. Wybierz pozycję Wylicz. IDictionaryEnumerator wylicza elementy w HashTable kolekcji, a Keys właściwość HashTable zwraca kolekcję kluczy.
    5. Wybierz pozycję Wyczyść. Wszystkie elementy są usuwane z kolekcji HashTable .

Uwaga

Przykładowe firmy, organizacje, produkty, nazwy domen, adresy e-mail, logo, osoby, miejsca i zdarzenia przedstawione tutaj są fikcyjne. Żadne skojarzenie z żadną rzeczywistą firmą, organizacją, produktem, nazwą domeny, adresem e-mail, logo, osobą, miejscami lub zdarzeniami nie jest zamierzone lub powinno zostać wywnioskować.