HashTable koleksiyonuyla çalışmak için Visual C# kullanma

Bu makalede, Visual C# içinde koleksiyonun HashTable nasıl kullanılacağı açıklanır.

Orijinal ürün sürümü: Visual C#
Özgün KB numarası: 309357

Özet

Karma oluşturma, verileri almak için verilerin maliyetli bir şekilde aranması gereksinimini ortadan kaldırdığından, verileri verimli bir şekilde almak için karmayı kullanabilirsiniz. Karma, verilerin yerini bulmak için anahtarın değerini kullanır.

Temel Sınıf Kitaplıkları, kendi karma tablolarınızı kodlamanız gerekmemesi için ad alanında System.Collections tanımlanan bir HashTable sınıf sunar.

Örneği derleme adımları

Koleksiyon HashTable bir (Key, Value) çiftini depolar ve depolama konumunu karma olarak almak ve almak için öğesini Key kullanır. Key sabittir ve içinde HashTableyinelenen girdiler olamaz. Bu örnek, içinde depolamak HashTableiçin basit Person bir sınıfın birkaç örneğini kullanır. Soyadı olarak kullanılır Key.

  1. Microsoft Visual Studio'yu açın ve Visual C# içinde bir Windows Forms Uygulaması projesi oluşturun. Form1 varsayılan olarak projeye eklenir.

  2. Çözüm Gezgini'da proje adına sağ tıklayın, Ekle'nin üzerine gelin ve sınıf modülü eklemek için Sınıf'ı seçin. Class1 varsayılan olarak projeye eklenir.

  3. Modüldeki Class1 herhangi bir kodu aşağıdaki kodla değiştirin:

    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;
        }
    }
    

    sınıfı, Person ve LastName parametrelerini alan FirstName ve bu parametreleri yerel değişkenlere atayan bir oluşturucuya sahiptir. İşlev, döndürmek ve birlikte birleştirmek için sınıfından geçersiz kılar ToStringObject.LnameFnameToString

  4. Form düzeyinde Hashtable bir nesne oluşturun ve türünde Personüç değişken bildirin. Sınıfına aşağıdaki kodu Form1 ekleyin:

    <?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. Aşağıdaki adımlarda, bir bloktaki öğesine üç Person nesne eklemek için nesnesinin Hashtabletry-catch yöntemini kullanınAdd.Hashtable Blok özel try-catch durumu yakalar ve yinelenen anahtarlar varsa bir ileti görüntüler:

    1. Form1'e bir Düğme denetimi yerleştirin ve Text özelliğini Öğe Ekle olarak değiştirin.

    2. Kod penceresini açmak için düğmeye çift tıklayın ve olayda Button1_Click aşağıdaki kodu yapıştırın:

      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 nesnesi bir dizin oluşturucu sağlar. Aşağıdaki adımlarda, karma konumda depolanan değere erişmek için ile Key dizin oluşturun:

    1. Form1'e bir Düğme denetimi ekleyin ve Name özelliğini Get Items olarak değiştirin.

    2. Düğmeye çift tıklayın ve olayda aşağıdaki kodu yapıştırın 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. Aşağıdaki adımlarda yöntemini kullanarak Remove koleksiyondan HashTable tek bir öğeyi kaldırın:

    1. Form1'e bir Düğme denetimi ekleyin ve Text özelliğini Öğeyi Kaldır olarak değiştirin.

    2. Düğmeye çift tıklayın ve olayda aşağıdaki kodu yapıştırın 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. Aşağıdaki adımlarda, koleksiyonda depolanan öğeleri numaralandırın HashTable :

    1. Form1'e bir Düğme denetimi ekleyin ve Text özelliğini Numaralandır olarak değiştirin.

    2. Düğmeye çift tıklayın ve olayda aşağıdaki kodu yapıştırın 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?>
      

      Bu kod türünde IDictionaryEnumerator bir değişken bildirir ve koleksiyonun GetEnumeratorHashTable yöntemini çağırır. Enumerator döndürülen ile kod koleksiyondaki öğeler arasında numaralandırır ve anahtarlar arasında numaralandırmak için yöntemini HashTable kullanırKeys.

  9. Aşağıdaki adımlarda yöntemini kullanarak Clear öğesini temizleyin HashTable:

    1. Form1'e bir Düğme denetimi ekleyin ve Text özelliğini Temizle olarak değiştirin.

    2. Düğmeye çift tıklayın ve olayda aşağıdaki kodu yapıştırın Button5_Click :

      MyTable.Clear();
      MessageBox.Show("HashTable is now empty");
      
  10. Uygulamayı derlemek ve çalıştırmak için şu adımları izleyin:

    1. Öğe Ekle'yi seçin. Koleksiyona HashTable üç Person nesne eklenir.
    2. Öğeleri Al'ı seçin. Dizin oluşturucu koleksiyondaki HashTable öğeleri alır. Yeni eklenen üç öğe görüntülenir.
    3. Öğeyi Kaldır'ı seçin. Anahtar konumundaki Burris öğe silinir.
    4. Numaralandır'ı seçin. IDictionaryEnumerator koleksiyondaki HashTable öğeler arasında numaralandırır ve Keys özelliğinin HashTable bir Anahtar Koleksiyonu döndürür.
    5. Temizle'yi seçin. Tüm öğeler koleksiyondan HashTable temizlenir.

Not

Burada gösterilen örnek şirketler, kuruluşlar, ürünler, etki alanı adları, e-posta adresleri, logolar, kişiler, yerler ve olaylar kurgusaldır. Hiçbir gerçek şirket, kuruluş, ürün, etki alanı adı, e-posta adresi, logo, kişi, yer veya olayla ilişkilendirme amaçlanmamıştır veya çıkarılmamalıdır.