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 HashTable
pliku . W tym przykładzie użyto kilku wystąpień prostej Person
klasy do przechowywania w klasie HashTable
. Nazwisko jest używane jako Key
.
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.
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.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 przyjmujeFirstName
parametry iLastName
i przypisuje te parametry do zmiennych lokalnych. FunkcjaToString
zastępujeToString
klasę,Object
aby zwracaćFname
iLname
łączyć ze sobą.Utwórz obiekt na poziomie
Hashtable
formularza i zadeklaruj trzy zmienne typuPerson
. Dodaj następujący kod doForm1
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?>
W poniższych krokach użyj
Add
metody obiektuHashtable
, aby dodać trzyPerson
obiekty doHashtable
try-catch
bloku. Bloktry-catch
przechwytuje wyjątek i wyświetla komunikat, jeśli istnieją zduplikowane klucze:Umieść kontrolkę Przycisk na formularzu Form1 i zmień właściwość Text na Dodaj elementy.
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); }
Obiekt
Hashtable
udostępnia indeksator. W poniższych krokach zaindeksujKey
wartość , aby uzyskać dostęp do wartości przechowywanej w lokalizacji skrótu:Dodaj kontrolkę Przycisk do formantu Form1 i zmień właściwość Name na Pobierz elementy.
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); }
W poniższych krokach użyj
Remove
metody , aby usunąć pojedynczy element z kolekcjiHashTable
:Dodaj kontrolkę Przycisk do formularza Form1 i zmień właściwość Text na Usuń element.
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("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?>
W poniższych krokach wylicz elementy przechowywane w kolekcji
HashTable
:Dodaj kontrolkę Przycisk do formantu Form1 i zmień właściwość Text na Wylicz.
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("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?>
Ten kod deklaruje zmienną typu
IDictionaryEnumerator
i wywołujeGetEnumerator
metodę kolekcjiHashTable
. Po zwróceniuEnumerator
kod wylicza elementy w kolekcji i używaKeys
metody metody doHashTable
wyliczania za pośrednictwem kluczy.
W poniższych krokach użyj metody ,
Clear
aby wyczyścićHashTable
element :Dodaj kontrolkę Przycisk do formantu Form1 i zmień właściwość Text na Wyczyść.
Kliknij dwukrotnie przycisk i wklej następujący kod w zdarzeniu
Button5_Click
:MyTable.Clear(); MessageBox.Show("HashTable is now empty");
Wykonaj następujące kroki, aby skompilować i uruchomić aplikację:
- Wybierz pozycję Dodaj elementy. Do kolekcji
HashTable
są dodawane trzyPerson
obiekty. - Wybierz pozycję Pobierz elementy. Indeksator uzyskuje elementy w kolekcji
HashTable
. Zostaną wyświetlone trzy nowo dodane elementy. - Wybierz pozycję Usuń element. Element w lokalizacji klucza
Burris
zostanie usunięty. - Wybierz pozycję Wylicz.
IDictionaryEnumerator
wylicza elementy wHashTable
kolekcji, aKeys
właściwośćHashTable
zwraca kolekcję kluczy. - Wybierz pozycję Wyczyść. Wszystkie elementy są usuwane z kolekcji
HashTable
.
- Wybierz pozycję Dodaj elementy. Do kolekcji
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ć.
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla