Memilih Koleksi
Kompromi dan kinerja.
Memilih Koleksi adalah pelajaran C# Academy gratis di CoddyKit. Ini adalah pelajaran 4 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.
Pertanyaan Pertama
Memilih kumpulan dimulai dengan satu pertanyaan: bagaimana Anda akan mengakses datanya? Berdasarkan posisi, berdasarkan kunci, atau hanya memeriksa keanggotaan?
List, Dictionary, dan HashSet masing-masing menjawab pola akses yang berbeda. Sesuaikan alat dengan polanya agar kode Anda tetap cepat dan jelas.
Akses Berdasarkan Posisi: Daftar
Jika urutan penting dan Anda mengakses item berdasarkan indeks, pilih List<T>. Struktur ini mempertahankan urutan penyisipan dan menyediakan pengindeksan O(1).
Contohnya adalah antrean steps, baris dalam urutan tampilan, atau urutan apa pun yang Anda iterasi dari awal hingga akhir. Duplikat diperbolehkan.
var steps = new List<string> { "mix", "bake", "cool" };
string first = steps[0]; // O(1) by indexAkses Berdasarkan Kunci: Kamus
Jika Anda mencari sesuatu berdasarkan pengenal unik, pilih Dictionary<K,V>. Struktur ini memetakan kunci ke nilai dalam O(1) secara rata-rata.
Contohnya adalah id pengguna ke pengguna, kode negara ke nama, atau kata ke jumlah kemunculannya. Kunci menjawab "yang mana", sedangkan nilai membawa datanya.
var users = new Dictionary<int, string> {
[101] = "Ann",
[102] = "Bob"
};
string name = users[101];Keanggotaan dan Keunikan: HashSet
Jika Anda hanya peduli apakah suatu nilai ada, atau harus menolak duplikat, pilih HashSet<T>. Contains berjalan dalam O(1) secara rata-rata.
Contohnya adalah URL visited, izin yang diizinkan, dan tag yang berbeda. Tidak ada nilai yang terkait, hanya keberadaan elemennya.
var visited = new HashSet<string>();
if (visited.Add(url)) {
// first time seeing this url
}Tabel Biaya
Biaya rata-rata: pengindeksan List O(1), tetapi Contains O(n). Pencarian pada Dictionary dan HashSet berjalan dalam O(1).
List.Add di akhir berjalan dalam O(1) teramortisasi; penyisipan atau penghapusan di tengah berjalan dalam O(n). Penambahan dan penghapusan pada Dictionary serta HashSet berjalan dalam O(1) secara rata-rata.
// List: index O(1), Contains O(n)
// Dictionary: by-key O(1), no index
// HashSet: Contains O(1), no value, no indexList Contains Merupakan Indikasi Masalah
Memanggil list.Contains berulang kali di dalam perulangan adalah jebakan O(n kuadrat). Setiap pemeriksaan memindai seluruh daftar.
Jika pemeriksaan keanggotaan mendominasi, beralihlah ke HashSet. Satu perubahan ini dapat mengubah perulangan yang lambat menjadi sangat cepat pada data berukuran besar.
using System;
using System.Collections.Generic;
class Program {
static void Main() {
var allow = new HashSet<int> { 2, 4, 6 };
foreach (int n in new[] { 1, 2, 3, 4 })
if (allow.Contains(n)) Console.Write(n + " ");
}
}Saat Membutuhkan Kunci dan Urutan
Memerlukan pencarian berdasarkan kunci sekaligus urutan yang dapat diprediksi? Dictionary standar tidak menjamin urutan.
Pertimbangkan untuk menyimpan List sebagai urutan dan Dictionary sebagai pencarian, atau gunakan SortedDictionary<K,V> agar kunci tetap dalam urutan terurut dengan biaya O(log n).
var sorted = new SortedDictionary<string, int>();
sorted["b"] = 2;
sorted["a"] = 1;
// enumerates a then b, in key orderPertukaran Penggunaan Memori
Kumpulan berbasis hash menukar penggunaan memori dengan kecepatan. Dictionary dan HashSet menyimpan bucket internal, sehingga menggunakan lebih banyak memori daripada List atau larik yang ringkas.
Untuk kumpulan kecil yang hanya berisi beberapa item, pemindaian List sebenarnya dapat cukup baik dan menggunakan lebih sedikit memori. Hashing mulai menguntungkan pada skala besar.
Program ke Antarmuka
Tanda tangan metode seharusnya meminta tipe paling tidak spesifik yang tetap dapat digunakan. Terima IEnumerable<T> untuk membaca, IReadOnlyList<T> untuk pembacaan berdasarkan indeks, dan IDictionary<K,V> untuk akses berdasarkan kunci.
Hal ini memisahkan pemanggil dari pilihan konkret Anda, sehingga Anda dapat mengganti implementasi nanti tanpa merusak tanda tangan.
int Sum(IEnumerable<int> values) {
int total = 0;
foreach (int v in values) total += v;
return total;
}Contoh Lengkap
Menghitung kata unik dalam teks menggunakan dua kumpulan secara bersamaan. Sebuah HashSet melacak kata seen; sebuah Dictionary menghitung jumlah kemunculannya.
Masing-masing menjalankan satu tugas dengan baik: set menerapkan keunikan, sedangkan kamus memetakan kata ke frekuensi, keduanya dalam O(1) secara rata-rata untuk setiap operasi.
using System;
using System.Collections.Generic;
class Program {
static void Main() {
var counts = new Dictionary<string, int>();
foreach (var w in "a b a c b a".Split(' '))
counts[w] = counts.GetValueOrDefault(w) + 1;
Console.WriteLine(counts["a"]); // 3
}
}Daftar Periksa Keputusan
Tanyakan secara berurutan: Apakah saya memerlukan pemetaan kunci ke nilai? Gunakan Dictionary. Apakah saya hanya memerlukan keunikan atau keanggotaan? Gunakan HashSet.
Jika tidak, apakah saya memerlukan urutan dan akses berdasarkan indeks, mungkin dengan duplikat? Gunakan List. Daftar periksa singkat ini mencakup sebagian besar kasus sehari-hari.
Pemeriksaan Singkat
Terapkan daftar periksa keputusan pada kebutuhan konkret.
Ringkasan
Pilih berdasarkan pola akses: List untuk urutan yang teratur dan memiliki indeks; Dictionary untuk pencarian kunci ke nilai; HashSet untuk keunikan dan keanggotaan.
Perhatikan notasi Big-O: hindari List.Contains dalam perulangan yang sering dijalankan, manfaatkan pencarian hash O(1), dan gunakan antarmuka agar pilihan Anda tetap fleksibel.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Memilih Koleksi” gratis?
Ya — teks lengkap “Memilih Koleksi” 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 “Memilih Koleksi”?
Kompromi dan kinerja. 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 4 dari 4.
Berapa lama pelajaran “Memilih Koleksi” 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