Daftar harga buah di etalase selalu ditampilkan rapi menurut abjad nama buah. Dictionary dari bab sebelumnya tidak menjamin urutan apa pun, sehingga menampilkan data secara terurut memerlukan pengurutan tambahan. .NET menyediakan dua koleksi yang menjaga keterurutan dari dalam: SortedList dan SortedDictionary. Keduanya menyimpan pasangan key-value dan mengurutkan berdasarkan kunci secara otomatis.

SortedList: Array Terurut Berdasarkan Kunci #

Setiap pasangan yang ditambahkan langsung ditempatkan pada posisi sesuai urutan kunci. Iterasi atas koleksi karenanya selalu menghasilkan urutan yang rapi tanpa usaha tambahan dari programmer.

csharp
SortedList<string, int> hargaBuah = new SortedList<string, int>();

hargaBuah.Add("Jeruk", 28000);
hargaBuah.Add("Apel", 35000);
hargaBuah.Add("Pepaya", 12000);

Console.WriteLine("Isi SortedList (urut kunci):");
foreach (KeyValuePair<string, int> baris in hargaBuah)
{
    Console.WriteLine($"- {baris.Key}: Rp{baris.Value}");
}

Output yang Dihasilkan:

text
Isi SortedList (urut kunci):
- Apel: Rp35000
- Jeruk: Rp28000
- Pepaya: Rp12000

Mari kita telaah contoh di atas:

  1. Baris 1: Kita mendeklarasikan SortedList dengan kunci string dan nilai int.
  2. Baris 3-5 (hargaBuah.Add(...)): Ketiga pasangan masuk dengan urutan acak: Jeruk, Apel, Pepaya.
  3. Baris 7-11: Saat iterasi berjalan, runtime mengeluarkan pasangan menurut urutan kunci — Apel sebelum Jeruk, dan Jeruk sebelum Pepaya — meskipun urutan penyisipannya berbeda.

SortedDictionary: Pohon Pencarian Terurut #

SortedDictionary<TKey, TValue> menawarkan jaminan urutan yang sama, tetapi menyimpan datanya dalam struktur pohon biner. Perbedaan struktur ini memengaruhi performa:

AspekSortedListSortedDictionary
Struktur internalArray terurutPohon biner (binary search tree)
Penambahan di tengah dataLebih lambat (elemen bergeser)Lebih cepat (perubahan penunjuk)
Akses berdasarkan indeksTersedia (GetByIndex)Tidak tersedia
Penggunaan memoriLebih hematLebih besar
csharp
SortedDictionary<string, int> stokCabang = new SortedDictionary<string, int>();

stokCabang.Add("Cabang Surabaya", 120);
stokCabang.Add("Cabang Bandung", 85);
stokCabang.Add("Cabang Medan", 64);

Console.WriteLine("Isi SortedDictionary (urut kunci):");
foreach (KeyValuePair<string, int> baris in stokCabang)
{
    Console.WriteLine($"- {baris.Key}: {baris.Value} kotak");
}

Output yang Dihasilkan:

text
Isi SortedDictionary (urut kunci):
- Cabang Bandung: 85 kotak
- Cabang Medan: 64 kotak
- Cabang Surabaya: 120 kotak