0Pricing
C# Academy · Pelajaran

HashSet dan Keunikan

Lacak nilai yang berbeda.

HashSet dan Keunikan adalah pelajaran C# Academy gratis di CoddyKit. Ini adalah pelajaran 3 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.

Apa Itu HashSet?

HashSet<T> menyimpan kumpulan nilai unik tanpa duplikat. Menambahkan nilai yang sudah ada tidak akan melakukan apa pun.

Seperti kamus, struktur ini didukung oleh tabel hash, sehingga pemeriksaan keanggotaan berjalan dalam O(1) secara rata-rata. Struktur ini tidak mempertahankan urutan penyisipan.

using System.Collections.Generic;

var seen = new HashSet<int>();
seen.Add(1);
seen.Add(1); // ignored, still one element

Add Mengembalikan Boolean

Add mengembalikan true jika nilainya baru dan false jika nilainya sudah ada.

Nilai kembalian tersebut berguna untuk mendeteksi duplikat dalam satu langkah, tanpa pemeriksaan Contains terpisah.

using System;
using System.Collections.Generic;

class Program {
    static void Main() {
        var set = new HashSet<string>();
        Console.WriteLine(set.Add("a")); // True
        Console.WriteLine(set.Add("a")); // False
    }
}

Pemeriksaan Keanggotaan Cepat

Contains pada HashSet berjalan dalam O(1) secara rata-rata, dibandingkan dengan O(n) pada List.

Jika Anda berulang kali menanyakan "apakah ini sudah ada?", set adalah alat yang tepat. Perbedaan kecepatannya menjadi sangat besar saat kumpulan data membesar.

using System;
using System.Collections.Generic;

class Program {
    static void Main() {
        var ids = new HashSet<int> { 10, 20, 30 };
        Console.WriteLine(ids.Contains(20)); // True
        Console.WriteLine(ids.Contains(99)); // False
    }
}

Menghapus Duplikat dari Daftar

Tugas yang umum adalah mengambil daftar dan menyimpan hanya nilai yang berbeda. Membuat HashSet dari daftar melakukannya dalam O(n).

Set yang dihasilkan berisi setiap nilai satu kali. Jika Anda memerlukan daftar lagi, bungkus set tersebut: new List<int>(set).

using System;
using System.Collections.Generic;

class Program {
    static void Main() {
        var nums = new List<int> { 1, 2, 2, 3, 3, 3 };
        var unique = new HashSet<int>(nums);
        Console.WriteLine(unique.Count); // 3
    }
}

Gabungan

UnionWith menambahkan setiap elemen dari kumpulan lain dan melewati duplikat. Hasilnya berisi semua elemen dari keduanya.

Operasi ini mengubah set secara langsung. Cara ini jauh lebih bersih daripada melakukan perulangan dan memanggil Add sendiri untuk setiap item.

using System;
using System.Collections.Generic;

class Program {
    static void Main() {
        var a = new HashSet<int> { 1, 2, 3 };
        a.UnionWith(new[] { 3, 4, 5 });
        Console.WriteLine(a.Count); // 5
    }
}

Irisan

IntersectWith hanya mempertahankan elemen yang juga muncul dalam kumpulan lain dan membuang sisanya.

Gunakan operasi ini untuk menemukan item yang sama, seperti tag yang digunakan bersama oleh dua artikel atau pengguna yang ada dalam kedua groups.

using System;
using System.Collections.Generic;

class Program {
    static void Main() {
        var a = new HashSet<int> { 1, 2, 3, 4 };
        a.IntersectWith(new[] { 2, 4, 6 });
        Console.WriteLine(string.Join(",", a)); // 2,4
    }
}

Selisih

ExceptWith menghapus dari set setiap elemen yang ditemukan dalam kumpulan lain, sehingga tersisa elemen yang hanya dimiliki set tersebut.

Ini adalah operasi selisih himpunan: "item yang ada di A tetapi tidak di B". Operasi ini sangat berguna untuk menghitung perubahan atau hal yang masih harus diproses.

var a = new HashSet<int> { 1, 2, 3, 4 };
a.ExceptWith(new[] { 2, 4 });
// a now contains 1 and 3

Himpunan Bagian dan Himpunan Pencakup

IsSubsetOf dan IsSupersetOf menguji hubungan pencakupan antara set dan mengembalikan bool.

Overlaps memeriksa apakah ada elemen yang sama, sedangkan SetEquals menguji apakah dua set berisi tepat elemen yang sama, tanpa memedulikan urutannya.

var a = new HashSet<int> { 1, 2 };
var b = new HashSet<int> { 1, 2, 3 };
bool sub = a.IsSubsetOf(b);   // true
bool ov = a.Overlaps(b);      // true

Kesetaraan Elemen

Keunikan bergantung pada GetHashCode dan Equals dari tipe elemen, sama seperti pada kunci kamus.

Untuk tipe khusus, timpa keduanya atau gunakan record; jika tidak, dua objek yang secara logis sama akan dianggap berbeda dan keduanya akan masuk ke dalam set.

var names = new HashSet<string>(
    System.StringComparer.OrdinalIgnoreCase);
names.Add("Sam");
bool dup = !names.Add("SAM"); // true: treated as same

Tanpa Pengindeksan atau Urutan

HashSet tidak memiliki akses berdasarkan indeks; Anda tidak dapat menulis set[0]. Anda hanya dapat melakukan enumerasi dengan foreach.

Urutan enumerasi tidak dijamin. Jika Anda memerlukan keunikan sekaligus urutan terurut, gunakan SortedSet<T>, yang menjaga elemen tetap terurut dengan biaya operasi O(log n).

using System;
using System.Collections.Generic;

class Program {
    static void Main() {
        var s = new SortedSet<int> { 3, 1, 2 };
        Console.WriteLine(string.Join(",", s)); // 1,2,3
    }
}

Melacak Item yang Telah Dilihat

Pola yang sering digunakan adalah menyaring aliran agar setiap nilai hanya muncul sekali. Tambahkan nilai ke set dan lakukan tindakan hanya saat Add mengembalikan true.

Cara ini lebih bersih dan lebih cepat daripada memeriksa daftar yang terus membesar, serta mengubah pemindaian O(n kuadrat) menjadi O(n).

using System;
using System.Collections.Generic;

class Program {
    static void Main() {
        var seen = new HashSet<int>();
        foreach (int x in new[] { 1, 1, 2, 3, 2 })
            if (seen.Add(x)) Console.Write(x + " ");
        // prints 1 2 3
    }
}

Pemeriksaan Singkat

Ingat kembali aturan yang diterapkan HashSet dan biaya pencariannya.

Ringkasan

HashSet<T> menyimpan nilai unik dengan penambahan, penghapusan, dan pemeriksaan keanggotaan dalam O(1) secara rata-rata, tetapi tanpa urutan atau pengindeksan.

HashSet sangat berguna untuk menghapus duplikat, melakukan pemeriksaan cepat "apakah saya sudah melihat ini", dan melakukan aljabar set melalui UnionWith, IntersectWith, serta ExceptWith. Tipe elemen khusus memerlukan kesetaraan yang benar.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “HashSet dan Keunikan” gratis?

Ya — teks lengkap “HashSet dan Keunikan” 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 “HashSet dan Keunikan”?

Lacak nilai yang berbeda. 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 3 dari 4.

Berapa lama pelajaran “HashSet dan Keunikan” 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

  1. List dalam Praktik
  2. Pencarian Dictionary
  3. HashSet dan Keunikan
  4. Memilih Koleksi
← Kembali ke C# Academy