Juri lomba mencatat skor akhir setiap peserta. Skor yang sama tidak perlu dicatat dua kali, dan daftar skor harus siap dibaca dari terkecil ke terbesar kapan pun. HashSet menjamin keunikan tetapi tidak menjamin urutan; SortedSet<T> menggabungkan keduanya: elemen unik yang selalu terjaga urutannya secara otomatis.

Unik dan Terurut Sekaligus #

Di balik layar, SortedSet<T> memakai struktur pohon biner seperti SortedDictionary. Method Add mengembalikan bool yang melaporkan apakah nilai benar-benar masuk, properti Min dan Max membaca elemen terkecil dan terbesar secara langsung, dan iterasi foreach selalu mengunjungi elemen dari yang terkecil.

csharp
SortedSet<int> skorLomba = new SortedSet<int>();

skorLomba.Add(88);
skorLomba.Add(75);
skorLomba.Add(95);
skorLomba.Add(88);

Console.WriteLine($"Jumlah skor unik: {skorLomba.Count}");
Console.WriteLine($"Skor terendah: {skorLomba.Min}");
Console.WriteLine($"Skor tertinggi: {skorLomba.Max}");

foreach (int skor in skorLomba)
{
    Console.WriteLine($"- {skor}");
}

SortedSet<int> rentangAtas = skorLomba.GetViewBetween(80, 95);
Console.WriteLine($"Skor pada rentang 80-95: {rentangAtas.Count}");

Output yang Dihasilkan:

text
Jumlah skor unik: 3
Skor terendah: 75
Skor tertinggi: 95
- 75
- 88
- 95
Skor pada rentang 80-95: 2

Mari kita telaah baris demi baris:

  1. Baris 3-6 (skorLomba.Add(...)): Empat pemanggilan Add, tetapi 88 muncul dua kali; SortedSet menyimpan nilai kedua kalinya sebagai penolakan, sehingga hanya 3 elemen tersimpan.
  2. Baris 8-10: Count melaporkan 3, sementara Min dan Max membaca elemen ujung tanpa perlu mengurutkan ulang.
  3. Baris 12-15: Foreach mengunjungi elemen dalam urutan menaik: 75, 88, 95.
  4. Baris 17 (skorLomba.GetViewBetween(80, 95)): Method ini mengembalikan “view” — pandangan parsial atas koleksi asal — yang hanya memuat elemen pada rentang 80 sampai 95, yaitu 88 dan 95.

View antara Dua Batas #

GetViewBetween(lower, upper) berguna ketika program kerap menampilkan sebagian data terurut, misalnya produk dengan harga pada rentang tertentu. View bukan salinan: elemen yang masuk atau keluar dari rentang di koleksi asal ikut terlihat pada view, dan view tetap menampilkan datanya dalam urutan menaik.