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 HashTable
yinelenen girdiler olamaz. Bu örnek, içinde depolamak HashTable
için basit Person
bir sınıfın birkaç örneğini kullanır. Soyadı olarak kullanılır Key
.
Microsoft Visual Studio'yu açın ve Visual C# içinde bir Windows Forms Uygulaması projesi oluşturun. Form1 varsayılan olarak projeye eklenir.
Çö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.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
veLastName
parametrelerini alanFirstName
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ılarToString
Object
.Lname
Fname
ToString
Form düzeyinde
Hashtable
bir nesne oluşturun ve türündePerson
üç değişken bildirin. Sınıfına aşağıdaki koduForm1
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?>
Aşağıdaki adımlarda, bir bloktaki öğesine üç
Person
nesne eklemek için nesnesininHashtable
try-catch
yöntemini kullanınAdd
.Hashtable
Blok özeltry-catch
durumu yakalar ve yinelenen anahtarlar varsa bir ileti görüntüler:Form1'e bir Düğme denetimi yerleştirin ve Text özelliğini Öğe Ekle olarak değiştirin.
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); }
Hashtable
nesnesi bir dizin oluşturucu sağlar. Aşağıdaki adımlarda, karma konumda depolanan değere erişmek için ileKey
dizin oluşturun:Form1'e bir Düğme denetimi ekleyin ve Name özelliğini Get Items olarak değiştirin.
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); }
Aşağıdaki adımlarda yöntemini kullanarak
Remove
koleksiyondanHashTable
tek bir öğeyi kaldırın:Form1'e bir Düğme denetimi ekleyin ve Text özelliğini Öğeyi Kaldır olarak değiştirin.
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("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_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?>
Aşağıdaki adımlarda, koleksiyonda depolanan öğeleri numaralandırın
HashTable
:Form1'e bir Düğme denetimi ekleyin ve Text özelliğini Numaralandır olarak değiştirin.
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("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()); } } "?> <?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 koleksiyonunGetEnumerator
HashTable
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önteminiHashTable
kullanırKeys
.
Aşağıdaki adımlarda yöntemini kullanarak
Clear
öğesini temizleyinHashTable
:Form1'e bir Düğme denetimi ekleyin ve Text özelliğini Temizle olarak değiştirin.
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");
Uygulamayı derlemek ve çalıştırmak için şu adımları izleyin:
- Öğe Ekle'yi seçin. Koleksiyona
HashTable
üçPerson
nesne eklenir. - Öğeleri Al'ı seçin. Dizin oluşturucu koleksiyondaki
HashTable
öğeleri alır. Yeni eklenen üç öğe görüntülenir. - Öğeyi Kaldır'ı seçin. Anahtar konumundaki
Burris
öğe silinir. - Numaralandır'ı seçin.
IDictionaryEnumerator
koleksiyondakiHashTable
öğeler arasında numaralandırır veKeys
özelliğininHashTable
bir Anahtar Koleksiyonu döndürür. - Temizle'yi seçin. Tüm öğeler koleksiyondan
HashTable
temizlenir.
- Öğe Ekle'yi seçin. Koleksiyona
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.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin