C# Hashtable dengan Contoh

โšก Ringkasan Cerdas

Hashtable di C# adalah koleksi dari namespace System.Collections yang menyimpan data sebagai pasangan kunci-nilai, di mana setiap kunci unik dipetakan ke suatu nilai dan kunci tersebut menyediakan pencarian cepat untuk nilai yang tersimpan.

  • ๐Ÿ“š Pasangan kunci-nilai: Hashtable menyimpan dua nilai per elemen, yaitu kunci dan nilainya, berbeda dengan stack atau array list yang hanya menyimpan satu nilai.
  • โž• Menambahkan elemen: Metode Add memasukkan kunci dan nilai secara bersamaan, dan setiap kunci di dalam Hashtable harus unik.
  • ๐Ÿ‘€ ContainsKey dan ContainsValue: Metode-metode ini mengembalikan nilai true atau false sehingga Anda dapat menguji apakah kunci atau nilai sudah ada.
  • ๐Ÿ” Membaca nilai: Properti Keys dengan ICollection, atau perulangan DictionaryEntry, memungkinkan Anda membaca setiap nilai yang tersimpan secara berurutan.
  • ๏ธ Metode dan sifat-sifat: Remove, Clear, Count, Keys, dan Values โ€‹โ€‹mengelola dan memeriksa isi Hashtable.
  • ๐Ÿค– Bantuan AI: GitHub Copilot membuat kerangka kode Hashtable, sementara C# dan ML.NET modern lebih menyukai Dictionary generik untuk data key-value yang aman tipe.

C# Tabel hash

Apa itu Hashtable di C#?

Tabel hash adalah koleksi khusus yang digunakan untuk menyimpan item nilai kunci. Jadi, alih-alih hanya menyimpan satu nilai seperti tumpukan, daftar array, dan antrian, tabel hash menyimpan 2 nilai. 2 nilai ini membentuk elemen tabel hash.

Di bawah ini adalah beberapa contoh tampilan nilai tabel hash.

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

Di atas kami memiliki 3 pasangan nilai kunci. Kunci setiap elemen masing-masing adalah 001, 002 dan 003. Nilai dari setiap pasangan nilai kunci adalah โ€œ.Bersihโ€œ, โ€œC#โ€ dan โ€œASP.Netโ€ masing-masing.

Mari kita lihat operasi yang tersedia untuk koleksi Hashtable secara lebih detail.

Deklarasi Hashtable

Deklarasi Hashtable ditunjukkan di bawah ini. Hashtable dibuat dengan bantuan Tipe Data Hashtable. Kata kunci โ€œbaruโ€ digunakan untuk membuat objek Hashtable. Objek tersebut kemudian ditugaskan ke variabel ht.

Hashtable ht = new Hashtable()

Menambahkan elemen ke Hashtable

Metode Tambah digunakan untuk menambahkan elemen ke antre. Sintaks umum dari pernyataan tersebut diberikan di bawah ini

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

Contoh 1:

Ingatlah bahwa setiap elemen tabel hash terdiri dari 2 nilai, satu adalah kuncinya, dan yang lainnya adalah nilainya.

Sekarang, mari kita lihat ini berfungsi pada tingkat kode. Semua kode yang disebutkan di bawah akan ditulis ke aplikasi Konsol kami.

Kode akan ditulis ke file Program.cs kami. Dalam program di bawah ini, kita akan menulis kode untuk melihat bagaimana kita dapat menggunakan metode yang disebutkan di atas.

Untuk saat ini dalam contoh kita, kita hanya akan melihat bagaimana kita dapat membuat tabel hash, menambahkan elemen ke tabel hash dan menampilkannya sesuai kebutuhan.

Hashtable di 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 Penjelasan:-

  1. Pertama, kita mendeklarasikan variabel hashtable menggunakan tipe data Hashtable dengan menggunakan kata kunci โ€œBaruโ€. Nama variabel yang didefinisikan adalah 'ht'.
  2. Kami kemudian menambahkan elemen ke tabel hash menggunakan metode Tambah. Ingatlah bahwa kita perlu menambahkan elemen kunci dan nilai saat menambahkan sesuatu ke tabel hash.
  3. Tidak ada cara langsung untuk menampilkan elemen tabel hash.
    • Untuk menampilkan tabel hash, pertama-tama kita perlu mendapatkan daftar kunci (001, 002 dan 003) dari tabel hash.
    • Ini dilakukan melalui antarmuka ICollection. Ini adalah tipe data khusus yang dapat digunakan untuk menyimpan kunci koleksi tabel hash. Kami kemudian menetapkan kunci koleksi hashtable ke variabel 'kunci'.
  4. Selanjutnya untuk setiap nilai kunci, kita mendapatkan nilai terkait di tabel hash dengan menggunakan pernyataan ht[k].

Jika kode di atas dimasukkan dengan benar dan program dijalankan, output berikut akan ditampilkan.

Keluaran:

Hashtable di C#

Mari kita lihat beberapa metode lain yang tersedia untuk tabel hash.

BerisiKey

Metode ini digunakan untuk melihat apakah ada kunci di Hashtable. Di bawah ini adalah sintaks umum dari pernyataan ini. Pernyataan akan mengembalikan nilai benar jika kuncinya ada, jika tidak maka akan mengembalikan nilai salah.

Hashtable.Containskey(key)

BerisiNilai

Metode ini digunakan untuk melihat apakah suatu Nilai ada di Hashtable. Di bawah ini adalah sintaks umum dari pernyataan ini. Pernyataan akan mengembalikan nilai benar jika Nilainya ada, jika tidak maka akan mengembalikan nilai salah.

Hashtable.ContainsValue(value)

Contoh 2:

Mari kita ubah kode di kita Aplikasi konsol untuk menunjukkan bagaimana kita dapat menggunakan metode โ€œContainskeyโ€ dan โ€œContainsValueโ€.

Hashtable di 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 Penjelasan:-

  1. Pertama, kita menggunakan metode ContentKey untuk melihat apakah kunci tersebut ada di tabel hash. Metode ini akan mengembalikan nilai true jika kunci ada di tabel hash. Metode ini harus mengembalikan nilai true karena kuncinya memang ada di tabel hash.
  2. Kami kemudian menggunakan metode ContentValue untuk melihat apakah nilainya ada di tabel hash. Metode ini akan mengembalikan 'benar' karena Nilai memang ada di tabel hash.

Jika kode di atas dimasukkan dengan benar dan program dijalankan, output berikut akan ditampilkan.

Keluaran:

Hashtable di C#

Dari outputnya, Anda dapat melihat dengan jelas bahwa kunci dan nilai yang dicari ada di tabel hash.

Cara Melakukan Perulangan pada Hashtable C#

Contoh-contoh di atas membaca nilai melalui koleksi Keys, tetapi Hashtable dapat ditelusuri dengan cara yang lebih bersih. Sebuah perulangan foreach pada DictionaryEntry akan memberikan Anda kunci dan nilai dari setiap elemen secara bersamaan dalam satu kali proses, yang merupakan cara paling umum untuk membaca Hashtable.

Langkah 1) Buat sebuah Hashtable dan tambahkan tiga pasangan kunci-nilai ke dalamnya.

Langkah 2) Lakukan perulangan pada Hashtable dengan variabel DictionaryEntry, kemudian baca properti Key dan Value dari setiap entri.

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 Penjelasan:-

  1. Sebuah Hashtable bernama ht dibuat, dan tiga pasangan kunci-nilai dimasukkan dengan metode Add.
  2. Perulangan foreach menetapkan setiap elemen ke DictionaryEntry, yang properti Key dan Value-nya memperlihatkan dua bagian dari pasangan tersebut.

Saat program dijalankan, program akan mencetak setiap tombol beserta nilainya, misalnya 101 โ€“ JavaKarena Hashtable tidak menyimpan urutan penyisipan, pasangan tersebut mungkin muncul dalam urutan yang berbeda dari saat ditambahkan. Untuk membaca hanya kuncinya, lakukan perulangan pada koleksi Keys, dan untuk membaca hanya nilainya, lakukan perulangan pada koleksi Values.

Metode dan Properti Hashtable C#

Kelas Hashtable menyediakan sejumlah kecil metode dan properti yang mencakup hampir semua tugas yang Anda perlukan, mulai dari menambahkan dan menghapus pasangan hingga memeriksa keanggotaan dan menghitung elemen. Anggota yang paling berguna tercantum di bawah ini.

Anggota Tipe Deskripsi
Tambahkan(kunci, nilai) metode Menyisipkan pasangan kunci dan nilai baru; kunci harus unik.
Hapus(kunci) metode Menghapus elemen yang cocok dengan kunci yang ditentukan.
Jernih() metode Menghapus semua pasangan kunci-nilai dari Hashtable.
ContainsKey(key) metode Mengembalikan nilai true jika kunci yang diberikan ada.
ContainsValue(value) metode Mengembalikan nilai true jika nilai yang diberikan ada.
Menghitung Milik Mendapatkan jumlah pasangan kunci-nilai yang tersimpan.
Kunci-kunci Milik Mengembalikan koleksi semua kunci.
Nilai - Nilai Milik Mengembalikan kumpulan semua nilai.

Karena setiap kunci di-hash, ContainsKey dan pengindeks menemukan elemen dalam waktu yang hampir konstan, itulah yang membuat Hashtable sangat berguna untuk pencarian cepat.

Perbedaan Antara Hashtable dan Dictionary di C#

Hashtable dan Dictionary sama-sama menyimpan pasangan kunci-nilai, dan keduanya termasuk dalam keluarga besar C#. koleksiPerbedaan pentingnya adalah keamanan tipe, dan perbedaan itulah yang menentukan mana yang harus Anda gunakan dalam kode baru.

  • Jenis keamanan: Hashtable menyimpan setiap kunci dan nilai sebagai sebuah objek, sedangkan Dictionary menyimpan setiap kunci dan nilai sebagai sebuah objek. Bersifat generik, sehingga kompiler memeriksa tipe yang Anda gunakan.
  • Ruang nama: Hashtable berada di System.Collections, sedangkan Dictionary berada di System.Collections.Generic.
  • Boxing: Hashtable menyimpan tipe nilai seperti int dalam sebuah kotak, sedangkan Dictionary generik menyimpannya secara langsung dan menghindari biaya tersebut.
  • Kinerja: Dictionary biasanya lebih cepat karena tidak memerlukan konversi tipe data dari objek saat membaca nilai.
  • Keamanan benang: Hashtable menawarkan SyncPembungkus yang dikronisasi untuk satu penulis dengan banyak pembaca, sementara kode konkuren biasanya memilih ConcurrentDictionary.

Untuk proyek baru apa pun, Dictionary generik adalah pilihan yang direkomendasikan, dan Hashtable non-generik sebagian besar muncul dalam kode lama.

Pertanyaan Umum Demo Slot

Metode Remove menghapus elemen dengan kunci tertentu dan mengurangi Count sebanyak satu. Jika kunci tidak ada, tidak terjadi apa-apa, jadi panggil ContainsKey terlebih dahulu jika Anda harus yakin bahwa kunci tersebut ada.

Tidak. Setiap kunci dalam Hashtable harus unik. Memanggil Add dengan kunci yang sudah ada akan menghasilkan ArgumentException. Namun, Anda dapat menyimpan nilai yang sama di bawah beberapa kunci berbeda tanpa kesalahan apa pun.

Hashtable mendukung satu penulis dengan banyak pembaca secara aman. Untuk beberapa alur penulisan, bungkuslah menggunakan Hashtable.SyncGunakan hronized, atau lebih baik gunakan ConcurrentDictionary dari System.Collections.Concurrent, yang menangani pembacaan dan penulisan bersamaan tanpa kunci eksternal.

Pencarian nilai berdasarkan kunci berjalan dalam waktu O(1) yang hampir konstan secara rata-rata, karena kunci di-hash untuk menemukan bucket-nya. Tabrakan hash yang parah dapat memperlambatnya, tetapi hal itu jarang terjadi dengan kunci yang terdistribusi dengan baik.

Suatu nilai boleh berupa null, tetapi kunci tidak boleh. Meneruskan kunci null ke Add atau pengindeks akan melempar ArgumentNullException. Setiap kunci juga harus unik dan tidak boleh berubah selama disimpan.

Hashtable tidak menyimpan urutan, sehingga tidak dapat diurutkan di tempatnya. Salin kuncinya ke dalam daftar atau ArrayList, urutkan daftar tersebut, lalu baca nilai berdasarkan kunci. SortedList menyimpan entri-entrinya dalam urutan otomatis.

Ya. GitHub Copilot menulis deklarasi Hashtable, panggilan Add, dan perulangan DictionaryEntry dari komentar singkat atau nama metode. Seringkali ia menyarankan Dictionary generik sebagai gantinya, karena itu adalah koleksi yang direkomendasikan untuk kode C# baru.

Data pelatihan ML.NET mengalir melalui koleksi bertipe dan pipeline IDataView, bukan melalui Hashtable. Namun, peta key-value berbasis hash tetap mendukung pencarian fitur, pengkodean kosakata, dan caching di sekitar model pembelajaran mesin.

Ringkaslah postingan ini dengan: