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.
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:
Jumlah skor unik: 3
Skor terendah: 75
Skor tertinggi: 95
- 75
- 88
- 95
Skor pada rentang 80-95: 2Mari kita telaah baris demi baris:
- Baris 3-6 (
skorLomba.Add(...)): Empat pemanggilanAdd, tetapi88muncul dua kali;SortedSetmenyimpan nilai kedua kalinya sebagai penolakan, sehingga hanya 3 elemen tersimpan. - Baris 8-10:
Countmelaporkan 3, sementaraMindanMaxmembaca elemen ujung tanpa perlu mengurutkan ulang. - Baris 12-15: Foreach mengunjungi elemen dalam urutan menaik: 75, 88, 95.
- Baris 17 (
skorLomba.GetViewBetween(80, 95)): Method ini mengembalikan “view” — pandangan parsial atas koleksi asal — yang hanya memuat elemen pada rentang 80 sampai 95, yaitu88dan95.
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.