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.
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:
Jumlah jenis barang: 3
Stok kopi sachet: 18Mari kita telaah baris demi baris:
- Baris 1: Kita mendeklarasikan Dictionary dengan kunci
string(nama barang) dan nilaiint(jumlah stok). - Baris 3-4 (
stokBarang.Add(...)): MethodAddmenyisipkan pasangan baru; menambahkan kunci yang sudah ada melaluiAddmemicuArgumentException. - 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”. - Baris 7-8:
Countmenghitung jumlah pasangan, dan indexer membaca nilai"Kopi sachet"secara langsung. - 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>.
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:
Susu kotak belum terdaftar
Gula pasir: 20 bungkus
Tepung terigu: 40 bungkus
Kopi sachet: 18 bungkus