Tablica mieszająca C# z przykładami

⚡ Inteligentne podsumowanie

Hashtable w języku C# to kolekcja z przestrzeni nazw System.Collections przechowująca dane jako pary klucz-wartość, gdzie każdy unikatowy klucz jest odwzorowywany na wartość, a klucz umożliwia szybkie wyszukiwanie tej przechowywanej wartości.

  • 📚 Pary klucz-wartość: Tablica mieszająca przechowuje dwie wartości na element: klucz i jego wartość, zamiast pojedynczej wartości przechowywanej w liście stosu lub tablicy.
  • Dodawanie elementów: Metoda Add wstawia jednocześnie klucz i wartość, a każdy klucz wewnątrz obiektu Hashtable musi być unikatowy.
  • ???? ZawieraKlucz i ZawieraWartość: Metody te zwracają wartość true lub false, dzięki czemu można sprawdzić, czy klucz lub wartość już istnieje.
  • 🔁 Odczyt wartości: Właściwość Keys z pętlą ICollection lub DictionaryEntry umożliwia odczytanie każdej zapisanej wartości po kolei.
  • 🛠️. Metody i właściwości: Usuń, Wyczyść, Zlicz, Klucze i Wartości umożliwiają zarządzanie i sprawdzanie zawartości tablicy mieszającej.
  • 🤖 Pomoc AI: GitHub Copilot tworzy szkielet kodu Hashtable, podczas gdy współczesny C# i ML.NET preferują ogólny Dictionary w celu zapewnienia bezpieczeństwa typu danych klucz-wartość.

Tablica mieszająca języka C#

Co to jest Hashtable w C#?

Tabela mieszająca to specjalna kolekcja używana do przechowywania elementów klucz-wartość. Zamiast więc przechowywać tylko jedną wartość, taką jak stos, lista tablic i kolejka, tabela mieszająca przechowuje 2 wartości. Te 2 wartości tworzą element tablicy mieszającej.

Poniżej znajduje się przykład tego, jak mogą wyglądać wartości tabeli mieszającej.

{ "001" , ".Net" }
{ "002" , ".C#" }
{ "003" , "ASP.Net" }

Powyżej mamy 3 pary klucz-wartość. Klucze każdego elementu to odpowiednio 001, 002 i 003. Wartości każdej pary klucz-wartość to „. NettoOdpowiednio „, „C#” i „ASP.Net”.

Przyjrzyjmy się bliżej operacjom dostępnym dla kolekcji Hashtable.

Deklaracja Hashtable

Poniżej pokazano deklarację Hashtable. Hashtable jest tworzony za pomocą typu danych Hashtable. Słowo kluczowe „new” służy do tworzenia obiektu Hashtable. Obiekt zostaje następnie przypisany do zmiennej ht.

Hashtable ht = new Hashtable()

Dodawanie elementów do Hashtable

Metoda Add służy do dodawania elementu do kolejka. Ogólna składnia instrukcji jest podana poniżej

HashTable.add("key","value")

1 przykład:

Pamiętaj, że każdy element tablicy mieszającej składa się z 2 wartości, jedna jest kluczem, a druga wartością.

Zobaczmy teraz, jak to działa na poziomie kodu. Cały poniższy kod zostanie zapisany w naszej aplikacji konsolowej.

Kod zostanie zapisany w naszym pliku Program.cs. W poniższym programie napiszemy kod, aby zobaczyć, jak możemy wykorzystać powyższe metody.

Na razie w naszym przykładzie przyjrzymy się tylko, jak możemy utworzyć tablicę haszującą, dodać elementy do tablicy mieszającej i odpowiednio je wyświetlić.

Hashtable w C#

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DemoApplication
{
 class Program
 {
  static void Main(string[] args)
  {
   Hashtable ht = new Hashtable();
   ht.Add("001",".Net");
   ht.Add("002","C#");
   ht.Add("003","ASP.Net");

   ICollection keys = ht.Keys;

   foreach (String k in keys)
   {
    Console.WriteLine(ht[k]);
   }
    Console.ReadKey();
   }
 }
}

Code Wyjaśnienie:-

  1. Najpierw deklarujemy zmienną hashtable, używając typu danych Hashtable, używając słowa kluczowego „Nowy”. Nazwa zdefiniowanej zmiennej to „ht”.
  2. Następnie dodajemy elementy do tabeli skrótów za pomocą metody Add. Pamiętaj, że podczas dodawania czegoś do tablicy mieszającej musimy dodać zarówno element klucza, jak i wartości.
  3. Nie ma bezpośredniego sposobu wyświetlania elementów tabeli mieszającej.
    • Aby wyświetlić tablicę mieszającą, musimy najpierw pobrać listę kluczy (001, 002 i 003) z tablicy mieszającej.
    • Odbywa się to poprzez interfejs ICollection. Jest to specjalny typ danych, który może być używany do przechowywania kluczy kolekcji hashtable. Następnie przypisujemy klucze kolekcji hashtable do zmiennej „keys”.
  4. Następnie dla każdej wartości klucza uzyskujemy powiązaną wartość w tablicy skrótów za pomocą instrukcji ht[k].

Jeżeli powyższy kod zostanie wpisany poprawnie i program zostanie uruchomiony, wyświetlony zostanie następujący wynik.

Wyjście:

Hashtable w C#

Przyjrzyjmy się innym metodom dostępnym dla tabel skrótów.

Zawiera klucz

Ta metoda służy do sprawdzania, czy klucz znajduje się w Hashtable. Poniżej znajduje się ogólna składnia tego stwierdzenia. Instrukcja zwróci wartość true, jeśli klucz istnieje, w przeciwnym razie zwróci wartość false.

Hashtable.Containskey(key)

ZawieraWartość

Ta metoda służy do sprawdzania, czy wartość znajduje się w Hashtable. Poniżej znajduje się ogólna składnia tego stwierdzenia. Instrukcja zwróci wartość true, jeśli wartość istnieje, w przeciwnym razie zwróci wartość false.

Hashtable.ContainsValue(value)

2 przykład:

Zmieńmy kod w naszym Aplikacja konsoli aby pokazać, jak możemy wykorzystać metody „Containskey” i „ContainsValue”.

Hashtable w C#

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DemoApplication
{
 class Program
 {
  static void Main(string[] args)
  {
   Hashtable ht = new Hashtable();
   ht.Add("001",".Net");
   ht.Add("002","C#");
   ht.Add("003","ASP.Net");

   Console.WriteLine(ht.ContainsKey("001"));
   Console.WriteLine(ht.ContainsValue("C#"));
   Console.ReadKey();
   }
 }
}

Code Wyjaśnienie:-

  1. Najpierw używamy metody ZawieraKey, aby sprawdzić, czy klucz znajduje się w tablicy mieszającej. Ta metoda zwróci wartość true, jeśli klucz znajduje się w tablicy mieszającej. Ta metoda powinna zwrócić wartość true, ponieważ klucz istnieje w tablicy skrótów.
  2. Następnie używamy metody ZawieraValue, aby sprawdzić, czy wartość znajduje się w tablicy mieszającej. Ta metoda zwróci wartość „true”, ponieważ wartość istnieje w tablicy skrótów.

Jeżeli powyższy kod zostanie wpisany poprawnie i program zostanie uruchomiony, wyświetlony zostanie następujący wynik.

Wyjście:

Hashtable w C#

Z danych wyjściowych wyraźnie wynika, że ​​zarówno szukany klucz, jak i wartość znajdują się w tabeli skrótów.

Jak przejść przez tablicę mieszającą C#

Powyższe przykłady odczytują wartości z kolekcji kluczy (Keys), ale tablicę mieszającą (Hashtable) można przeglądać w bardziej przejrzysty sposób. Pętla foreach na obiekcie DictionaryEntry przekazuje klucz i wartość każdego elementu w jednym przebiegu, co jest najczęstszym sposobem odczytu tablicy mieszającej.

Krok 1) Utwórz tablicę mieszającą i dodaj do niej trzy pary klucz-wartość.

Krok 2) Przejrzyj tablicę Hashtable ze zmienną DictionaryEntry, a następnie odczytaj właściwości Key i Value każdego wpisu.

using System;
using System.Collections;

namespace DemoApplication
{
 class Program
 {
  static void Main(string[] args)
  {
   Hashtable ht = new Hashtable();
   ht.Add("101", "Java");
   ht.Add("102", "Python");
   ht.Add("103", "Kotlin");

   foreach (DictionaryEntry entry in ht)
   {
    Console.WriteLine(entry.Key + " - " + entry.Value);
   }
   Console.ReadKey();
  }
 }
}

Code Wyjaśnienie:-

  1. Tworzona jest tablica mieszająca o nazwie ht, a następnie za pomocą metody Add wstawiane są do niej trzy pary klucz-wartość.
  2. Pętla foreach przypisuje każdy element do DictionaryEntry, którego właściwości Key i Value ujawniają dwie połowy pary.

Po uruchomieniu programu, każdy klucz jest wyświetlany obok jego wartości, np. 101 – JavaPonieważ tablica skrótów nie zachowuje kolejności wstawiania, pary mogą pojawić się w innej kolejności niż zostały dodane. Aby odczytać tylko klucze, wykonaj pętlę po kolekcji kluczy, a aby odczytać tylko wartości, wykonaj pętlę po kolekcji wartości.

Metody i właściwości tablicy mieszającej w C#

Klasa Hashtable udostępnia niewielki zestaw metod i właściwości, które obejmują niemal wszystkie potrzebne zadania, od dodawania i usuwania par po sprawdzanie przynależności i zliczanie elementów. Poniżej wymieniono najbardziej przydatne właściwości.

Członek Typ OPIS
Dodaj(klucz, wartość) Metoda wykonania Wstawia nową parę klucz-wartość; klucz musi być unikalny.
Usuń(klawisz) Metoda wykonania Usuwa element pasujący do określonego klucza.
Jasne() Metoda wykonania Usuwa każdą parę klucz-wartość z tablicy mieszającej.
ZawieraKlucz(klucz) Metoda wykonania Zwraca wartość true, jeśli podany klucz jest obecny.
ZawieraWartość(wartość) Metoda wykonania Zwraca wartość true, jeżeli podana wartość jest obecna.
Liczyć Właściwość Pobiera liczbę zapisanych par klucz-wartość.
Klucze Właściwość Zwraca kolekcję wszystkich kluczy.
Wartości Właściwość Zwraca kolekcję wszystkich wartości.

Ponieważ każdy klucz jest haszowany, ContainsKey i indeksator lokalizują element w niemal stałym czasie, co sprawia, że ​​tablica mieszająca jest tak przydatna do szybkich wyszukiwań.

Różnica między tablicą mieszającą a słownikiem w C#

Zarówno tablica mieszająca, jak i słownik przechowują pary klucz-wartość i oba należą do szerszej rodziny języka C# kolekcjeWażną różnicą jest bezpieczeństwo typu, a to właśnie ono decyduje, po którą z nich należy sięgnąć w nowym kodzie.

  • Bezpieczeństwo typu: Tablica mieszająca przechowuje każdy klucz i wartość jako obiekt, podczas gdy słownik jest generyczny, więc kompilator sprawdza używane typy.
  • Przestrzeń nazw: Tablica mieszająca znajduje się w System.Collections, natomiast słownik znajduje się w System.Collections.Generic.
  • BoxNS: Tablica mieszająca przechowuje typy wartości, takie jak int, natomiast słownik ogólny przechowuje je bezpośrednio, unikając tym samym tego kosztu.
  • Wydajność: Słownik jest zwykle szybszy, ponieważ nie wymaga rzutowania wstecz z obiektu podczas odczytywania wartości.
  • Bezpieczeństwo gwintów: Hashtable oferuje Synczsynchronizowany wrapper dla jednego autora z wieloma czytelnikami, podczas gdy kod współbieżny zwykle wybiera ConcurrentDictionary.

W przypadku każdego nowego projektu zalecanym wyborem jest generyczny słownik, natomiast niegeneryczna tablica skrótów pojawia się głównie w starszym kodzie.

FAQ

Metoda Remove usuwa element o podanym kluczu i zmniejsza wartość Count o jeden. Jeśli klucz nie istnieje, nic się nie dzieje, dlatego najpierw wywołaj ContainsKey, aby upewnić się, że klucz jest obecny.

Nie. Każdy klucz w tablicy skrótów musi być unikatowy. Wywołanie funkcji Add z kluczem, który już istnieje, powoduje wyjątek ArgumentException. Można jednak przechowywać tę samą wartość pod kilkoma różnymi kluczami bez żadnego błędu.

Tablica mieszająca bezpiecznie obsługuje jednego autora z wieloma czytelnikami. W przypadku kilku wątków pisania, opakowuj ją za pomocą tablicy mieszającej.Synchronized lub preferuj ConcurrentDictionary z System.Collections.Concurrent, który obsługuje współbieżne odczyty i zapisy bez zewnętrznych blokad.

Wyszukiwanie wartości według klucza zajmuje średnio niemal stały czas O(1), ponieważ klucz jest haszowany w celu znalezienia odpowiedniego kontenera. Duże kolizje haszujące mogą spowolnić ten proces, ale jest to rzadkie w przypadku dobrze rozproszonych kluczy.

Wartość może być nullem, ale klucz nie. Przekazanie nulla do Add lub indeksatora powoduje wyjątek ArgumentNullException. Każdy klucz musi być unikatowy i nie powinien się zmieniać podczas przechowywania.

Tablica mieszająca nie zachowuje kolejności, więc nie można jej sortować w miejscu. Skopiuj jej klucze do listy lub tablicy ArrayList, posortuj tę listę, a następnie odczytaj wartości według klucza. Lista SortedList automatycznie porządkuje wpisy.

Tak. GitHub Copilot zapisuje deklaracje Hashtable, wywołania Add i pętle DictionaryEntry z krótkiego komentarza lub nazwy metody. Często sugeruje zamiast tego generyczny słownik, ponieważ jest to zalecana kolekcja dla nowego kodu C#.

Dane treningowe ML.NET przepływają przez kolekcje typizowane i potok IDataView, a nie przez tablicę mieszającą. Jednak mapy klucz-wartość oparte na skrótach nadal obsługują wyszukiwanie cech, kodowanie słownikowe i buforowanie w modelu uczenia maszynowego.

Podsumuj ten post następująco: