Pada kasir toko, stok barang dicari berdasarkan namanya, bukan berdasarkan posisi baris di catatan. Mencari "Kopi sachet" dengan menelusuri seluruh daftar terasa tidak efisien. Dictionary menyelesaikan persoalan ini dengan struktur pasangan key-value: setiap nilai disimpan di bawah satu kunci unik, dan pencarian dilakukan langsung lewat kunci tersebut.

Pasangan Key dan Value #

Dictionary<TKey, TValue> memuat dua tipe: TKey untuk kunci dan TValue untuk nilai. Setiap kunci hanya boleh muncul satu kali; kunci "Gula pasir" tidak dapat menampung dua nilai stok. Runtime menyimpan pasangan tersebut di dalam struktur hash, sehingga akses lewat indexer berlangsung cepat meski jumlah entri bertambah banyak.

csharp
Dictionary<string, int> stokBarang = new Dictionary<string, int>();

stokBarang.Add("Gula pasir", 25);
stokBarang.Add("Tepung terigu", 40);
stokBarang["Kopi sachet"] = 18;

Console.WriteLine($"Jumlah jenis barang: {stokBarang.Count}");
Console.WriteLine($"Stok kopi sachet: {stokBarang["Kopi sachet"]}");

stokBarang["Gula pasir"] = stokBarang["Gula pasir"] - 5;

Output yang Dihasilkan:

text
Jumlah jenis barang: 3
Stok kopi sachet: 18

Mari kita telaah baris demi baris:

  1. Baris 1: Kita mendeklarasikan Dictionary dengan kunci string (nama barang) dan nilai int (jumlah stok).
  2. Baris 3-4 (stokBarang.Add(...)): Method Add menyisipkan pasangan baru; menambahkan kunci yang sudah ada melalui Add memicu ArgumentException.
  3. Baris 5 (stokBarang["Kopi sachet"] = 18;): Indexer dengan kunci baru juga menyisipkan pasangan; indexer berarti lebih praktis untuk kasus “tambah bila belum ada, ganti bila sudah ada”.
  4. Baris 7-8: Count menghitung jumlah pasangan, dan indexer membaca nilai "Kopi sachet" secara langsung.
  5. Baris 10: Baris ini membaca stok lama, menguranginya 5, lalu menuliskan hasilnya kembali ke kunci yang sama; stok "Gula pasir" menjadi 20.

Membaca dengan Aman dan Iterasi #

Membaca kunci yang tidak terdaftar lewat indexer memicu exception. Method TryGetValue menawarkan jalur aman: method tersebut mengembalikan true bila kunci ditemukan dan menyalin nilai ke variabel keluaran. Untuk menelusuri seluruh isi, kita mengiterasi pasangan KeyValuePair<TKey, TValue>.

csharp
if (stokBarang.TryGetValue("Susu kotak", out int stokSusu))
{
    Console.WriteLine($"Stok susu kotak: {stokSusu}");
}
else
{
    Console.WriteLine("Susu kotak belum terdaftar");
}

foreach (KeyValuePair<string, int> baris in stokBarang)
{
    Console.WriteLine($"{baris.Key}: {baris.Value} bungkus");
}

Output yang Dihasilkan:

text
Susu kotak belum terdaftar
Gula pasir: 20 bungkus
Tepung terigu: 40 bungkus
Kopi sachet: 18 bungkus