Carian Dictionary
Akses kunci-nilai pantas.
Carian Dictionary ialah pelajaran Akademi C# percuma di CoddyKit. Ini ialah pelajaran 2 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Akademi C#, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Akademi C# merangkumi sejumlah 4 pelajaran.
Pasangan Kunci-Nilai
Dictionary<TKey, TValue> memetakan kunci unik kepada nilai. Anggaplah ia sebagai jadual carian: berikan kunci dan dapatkan nilainya semula dengan pantas.
Ia berasaskan jadual cincangan, jadi pencarian nilai berdasarkan kunci mengambil masa O(1) secara purata, jauh lebih pantas daripada mengimbas senarai.
using System.Collections.Generic;
var ages = new Dictionary<string, int>();
ages["Ann"] = 30;
ages["Bob"] = 25;Memulakan Kamus
Anda boleh mengisi kamus pada awalnya menggunakan pemula koleksi. Setiap entri memasangkan kunci dengan nilainya.
Kunci mestilah unik. Membekalkan kunci yang sama dua kali dalam pemula akan mencetuskan ArgumentException semasa masa jalan.
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 Mengikut Kunci
Gunakan pengindeks untuk membaca: dict[key]. Secara purata, operasi ini ialah O(1).
Namun, berhati-hatilah: jika kunci tiada, pengindeks akan mencetuskan KeyNotFoundException. Membaca kunci yang tiada ialah salah satu pepijat kamus yang paling biasa.
var ages = new Dictionary<string, int> { ["Ann"] = 30 };
int a = ages["Ann"]; // 30
// int b = ages["Zoe"]; // throws KeyNotFoundExceptionCarian Selamat dengan TryGetValue
TryGetValue mengelakkan pengecualian. Ia mengembalikan true dan menetapkan pemboleh ubah out apabila kunci wujud, atau false jika sebaliknya.
Ini ialah cara lazim tanpa peruntukan memori untuk mencari nilai yang kewujudannya tidak pasti.
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 Lalai
ContainsKey menyemak kewujudan kunci tanpa membaca nilainya, dalam O(1). Gunakannya sebelum membaca dengan pengindeks apabila anda hanya memerlukan jawapan ya atau tidak.
Jika anda memanggil kedua-dua ContainsKey dan pengindeks, kunci akan dicincang dua kali. TryGetValue melakukannya sekali sahaja, jadi biasanya lebih pantas.
var ages = new Dictionary<string, int> { ["Ann"] = 30 };
if (ages.ContainsKey("Ann"))
System.Console.WriteLine(ages["Ann"]);Menambah berbanding Menetapkan
Pengindeks dict[key] = value memasukkan pasangan baharu atau menulis ganti pasangan sedia ada. Add(key, value) hanya memasukkan pasangan dan mencetuskan pengecualian jika kunci itu sudah wujud.
Gunakan Add apabila kunci pendua patut dianggap sebagai ralat, dan gunakan pengindeks apabila penulisan ganti dibenarkan.
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"]);
}
}Mengalih Keluar Entri
Remove(key) memadamkan pasangan dan mengembalikan true jika kunci itu wujud, dengan kerumitan purata O(1).
Satu lebihan kaedah mengembalikan nilai yang dialih keluar melalui parameter out, berguna apabila anda mahu memadamkan dan menggunakan nilai itu dalam satu langkah.
var d = new Dictionary<string, int> { ["a"] = 1, ["b"] = 2 };
bool removed = d.Remove("a"); // true
bool again = d.Remove("a"); // falseMengulangi Pasangan
Gelung menghasilkan item KeyValuePair<TKey, TValue>. Nyahbina item tersebut kepada kunci dan nilai untuk menghasilkan kod yang kemas.
Susunan penghitungan tidak dijamin; jangan sekali-kali bergantung pada susunan entri dimasukkan. Gunakan Keys atau Values untuk mengulangi hanya 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}");
}
}Mengira dengan Kamus
Salah satu kegunaan klasik ialah menjumlahkan bilangan kemunculan. Bagi setiap item, tingkatkan bilangannya, bermula daripada sifar jika item itu baharu.
Pola ini berjalan dalam O(n) untuk n item kerana setiap carian dan kemas kini ialah O(1), berbanding O(n kuasa dua) jika anda mengimbas senarai 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']);
}
}Kesamaan Kunci Penting
Carian bergantung pada GetHashCode dan Equals bagi jenis kunci. Jenis terbina dalam dan string berfungsi terus tanpa konfigurasi tambahan.
Bagi kunci kelas tersuai, ambil alih kedua-dua kaedah itu (atau gunakan record); jika tidak, dua kunci yang kelihatan sama akan menghasilkan cincangan yang berbeza dan carian akan gagal.
var byName = new Dictionary<string, int>(
System.StringComparer.OrdinalIgnoreCase);
byName["Hi"] = 1;
bool found = byName.ContainsKey("HI"); // trueMemilih Jenis Nilai
Nilai boleh berupa apa-apa sahaja, termasuk senarai. Dictionary<string, List<int>> mengumpulkan banyak nilai di bawah satu kunci.
Apabila memasukkan data ke dalam struktur sedemikian, cipta senarai dalaman pada penggunaan pertama, kemudian tambah item kepadanya. Ini membina pemetaan berkumpulan dengan berbilang nilai.
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);
}Semakan Pantas
Pilih cara paling selamat untuk membaca kunci yang mungkin tiada.
Rumusan
Dictionary<K,V> menyediakan carian, pemasukan dan pengalihan keluar mengikut kunci dalam O(1) secara purata, dengan sokongan jadual cincangan.
Utamakan TryGetValue berbanding pengindeks yang mencetuskan pengecualian, pastikan kunci adalah unik, dan pastikan jenis kunci tersuai melaksanakan kesamaan serta pencincangan yang betul. Susunan pengulangan tidak ditentukan.
Pelajari C# dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 93
- Pelajaran
- 346
Soalan Lazim
Adakah pelajaran “Carian Dictionary” percuma?
Ya — teks penuh “Carian Dictionary” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Akademi C#, tingkat taraf kepada CoddyKit PRO. Kursus Akademi C# merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Carian Dictionary”?
Akses kunci-nilai pantas. Anda berlatih Akademi C# menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Akademi C#?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Akademi C# di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 2 daripada 4.
Berapa lamakah pelajaran “Carian Dictionary” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Akademi C# ini?
Ya. Setiap pelajaran Akademi C# menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- List dalam Amalan
- Carian Dictionary
- HashSet dan Keunikan
- Memilih Koleksi