Pencarian Dictionary
Akses kunci-nilai dengan cepat.
Pencarian Dictionary adalah pelajaran C# Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar C# Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus C# Academy mencakup 4 pelajaran total.
Pasangan Kunci-Nilai
Dictionary<TKey, TValue> memetakan kunci unik ke nilai. Anggaplah ini sebagai tabel pencarian: berikan kunci, lalu dapatkan nilainya kembali dengan cepat.
Struktur ini didukung oleh tabel hash, sehingga pencarian nilai berdasarkan kunci rata-rata membutuhkan waktu O(1), jauh lebih cepat daripada memindai daftar.
using System.Collections.Generic;
var ages = new Dictionary<string, int>();
ages["Ann"] = 30;
ages["Bob"] = 25;Menginisialisasi Dictionary
Anda dapat mengisi awal dictionary dengan penginisialisasi koleksi. Setiap entri memasangkan kunci dengan nilainya.
Kunci harus unik. Memberikan kunci yang sama dua kali dalam penginisialisasi akan memunculkan ArgumentException saat program dijalankan.
using System;
using System.Collections.Generic;
class Program {
static void Main() {
var caps = new Dictionary<string, string> {
["FR"] = "Paris",
["JP"] = "Tokyo"
};
Console.WriteLine(caps["JP"]);
}
}Membaca Berdasarkan Kunci
Gunakan pengindeks untuk membaca: dict[key]. Ini berjalan dalam O(1) secara rata-rata.
Namun, berhati-hatilah: jika kunci tidak ada, pengindeks akan melempar KeyNotFoundException. Membaca kunci yang tidak ada adalah salah satu bug kamus yang paling umum.
var ages = new Dictionary<string, int> { ["Ann"] = 30 };
int a = ages["Ann"]; // 30
// int b = ages["Zoe"]; // throws KeyNotFoundExceptionPencarian Aman dengan TryGetValue
TryGetValue mencegah pengecualian. Ini mengembalikan true dan menetapkan variabel out jika kunci ada, atau false jika tidak.
Ini adalah cara idiomatis tanpa alokasi untuk mencari nilai yang belum tentu ada.
using System;
using System.Collections.Generic;
class Program {
static void Main() {
var ages = new Dictionary<string, int> { ["Ann"] = 30 };
if (ages.TryGetValue("Ann", out int v))
Console.WriteLine(v);
}
}ContainsKey dan Nilai Bawaan
ContainsKey memeriksa keberadaan kunci tanpa membaca nilainya, dalam O(1). Gunakan ini sebelum membaca melalui pengindeks jika Anda hanya memerlukan jawaban ya atau tidak.
Jika Anda memanggil ContainsKey dan pengindeks, kunci akan di-hash dua kali. TryGetValue hanya melakukannya sekali, sehingga biasanya lebih cepat.
var ages = new Dictionary<string, int> { ["Ann"] = 30 };
if (ages.ContainsKey("Ann"))
System.Console.WriteLine(ages["Ann"]);Menambahkan vs Menetapkan
Pengindeks dict[key] = value menyisipkan pasangan baru atau menimpa pasangan yang sudah ada. Add(key, value) hanya menyisipkan pasangan, dan akan melempar pengecualian jika kuncinya sudah ada.
Gunakan Add jika kunci duplikat harus dianggap sebagai error, dan gunakan pengindeks jika penimpaan diperbolehkan.
using System;
using System.Collections.Generic;
class Program {
static void Main() {
var d = new Dictionary<string, int>();
d["x"] = 1;
d["x"] = 2; // overwrite, fine
Console.WriteLine(d["x"]);
}
}Menghapus Entri
Remove(key) menghapus pasangan dan mengembalikan true jika kuncinya ada, dengan kompleksitas rata-rata O(1).
Salah satu bentuk metode ini mengembalikan nilai yang dihapus melalui parameter out, yang berguna saat Anda ingin menghapus dan menggunakan nilai tersebut dalam satu langkah.
var d = new Dictionary<string, int> { ["a"] = 1, ["b"] = 2 };
bool removed = d.Remove("a"); // true
bool again = d.Remove("a"); // falseMengiterasi Pasangan
Perulangan menghasilkan item KeyValuePair<TKey, TValue>. Uraikan item tersebut menjadi kunci dan nilai agar kode lebih bersih.
Urutan enumerasi tidak dijamin; jangan pernah mengandalkan urutan saat entri disisipkan. Gunakan Keys atau Values untuk mengiterasi hanya salah satu sisi.
using System;
using System.Collections.Generic;
class Program {
static void Main() {
var d = new Dictionary<string, int> { ["a"] = 1, ["b"] = 2 };
foreach (var (key, val) in d)
Console.WriteLine($"{key}={val}");
}
}Menghitung dengan Kamus
Salah satu penggunaan klasik adalah menghitung kemunculan. Untuk setiap item, naikkan hitungannya, mulai dari nol jika item tersebut baru.
Pola ini berjalan dalam O(n) untuk n item karena setiap pencarian dan pembaruan berjalan dalam O(1), dibandingkan O(n kuadrat) jika Anda memindai daftar setiap kali.
using System;
using System.Collections.Generic;
class Program {
static void Main() {
var counts = new Dictionary<char, int>();
foreach (char c in "banana")
counts[c] = counts.GetValueOrDefault(c) + 1;
Console.WriteLine(counts['a']);
}
}Kesetaraan Kunci Itu Penting
Pencarian bergantung pada GetHashCode dan Equals dari tipe kunci. Tipe bawaan dan string dapat langsung digunakan.
Untuk kunci dari kelas khusus, timpa kedua metode tersebut (atau gunakan record); jika tidak, dua kunci yang tampak sama akan menghasilkan nilai hash yang berbeda dan pencarian akan gagal.
var byName = new Dictionary<string, int>(
System.StringComparer.OrdinalIgnoreCase);
byName["Hi"] = 1;
bool found = byName.ContainsKey("HI"); // trueMemilih Tipe Nilai
Nilai dapat berupa apa saja, termasuk daftar. Dictionary<string, List<int>> mengelompokkan banyak nilai di bawah satu kunci.
Saat menyisipkan ke dalam struktur seperti ini, buat daftar bagian dalam saat pertama kali digunakan, lalu tambahkan nilai ke dalamnya. Dengan demikian, Anda membangun pemetaan dengan banyak nilai yang dikelompokkan.
var groups = new Dictionary<string, List<int>>();
void Add(string k, int v) {
if (!groups.TryGetValue(k, out var list))
groups[k] = list = new List<int>();
list.Add(v);
}Pemeriksaan Singkat
Pilih cara paling aman untuk membaca kunci yang mungkin tidak ada.
Ringkasan
Dictionary<K,V> menyediakan pencarian, penyisipan, dan penghapusan berdasarkan kunci dalam O(1) secara rata-rata, dengan dukungan tabel hash.
Utamakan TryGetValue daripada pengindeks yang melempar pengecualian, pastikan kunci tetap unik, dan pastikan tipe kunci khusus menerapkan kesetaraan serta hashing yang benar. Urutan iterasi tidak ditentukan.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Pencarian Dictionary” gratis?
Ya — teks lengkap “Pencarian Dictionary” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus C# Academy, upgrade ke CoddyKit PRO. Kursus C# Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Pencarian Dictionary”?
Akses kunci-nilai dengan cepat. Kamu berlatih C# Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai C# Academy?
Tidak diperlukan pengalaman sebelumnya. C# Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.
Berapa lama pelajaran “Pencarian Dictionary” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran C# Academy ini?
Ya. Setiap pelajaran C# Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- List dalam Praktik
- Pencarian Dictionary
- HashSet dan Keunikan
- Memilih Koleksi