Site icon Serdar Yılmaz

C# – SortedList Sınıfı

C# – Koleksiyonlar” başlıklı yazımızda koleksiyonların avantajlarından, dezavantajlarından bahsedip, genel bir bilgi vermiştik. Bu yazımızda ise bir koleksiyon sınıfı olan SortedList‘den bahsedeceğiz.

SortedList Sınıfının Temel Yapısı

Standart dizilere eklenen elemanlar, belleğe sıralı bir şekilde yerleştirilmektedir. Sıfırdan başlayarak her bir elemana birer indeks değeri verip, elemanlara o indeksler aracılığıyla erişe bilmekteydik.

SortedList koleksiyonunda ise Anahtar(Key) ve Değer(Value) olmak üzere iki kavram karşımıza çıkmakta. Konuyu daha anlaşılır kılmak açısından; standart dizilere eklediğimiz elemanları Değer, o elemanlara erişmek için kullandığımız indeksleri de Anahtar olarak düşünebilirsiniz.

Her bir Değerin farklı bir Anahtarı olmalıdır yani koleksiyon içerisinde yer alan Anahtarlar birbirinden farklı olmalıdır. Şimdi, başlangıç seviyesinde basit bir C# konsol uygulaması hazırlayarak SortedList Sınıfını incelemeye devam edelim.

SortedList SiraliKoleksiyon = new SortedList();

// SiraliKoleksiyon.Add(Eklenecek_Anahtar,Eklenecek_Değer);
SiraliKoleksiyon.Add(41, "Kocaeli");
SiraliKoleksiyon.Add(54, "Sakarya");
SiraliKoleksiyon.Add(25, "Erzurum");

ICollection Anahtarlar = SiraliKoleksiyon.Keys;

foreach (var Anahtar in Anahtarlar)
    Console.WriteLine("Anahtar:{0} - Değer:{1}", Anahtar, SiraliKoleksiyon[Anahtar]);

Yukarıdaki örneğimizi açıklayacak olursak; Anahtar(Key) olarak plaka kodunu, Değer(Value) olarak da ilgili şehri tuttuğumuz bir koleksiyon oluşturduk. Keys özelliği ile koleksiyonumuzda yer alan tüm anahtarların listesini alıp, foreach döngüsüyle tüm Anahtar-Değer çiftlerini ekrana yazdırdık.

Öğeleri Sıralı Bir Şekilde Tutmakta

SortedList, Anahtarların değerlerine bağlı olarak Anahtar-Değer çiftlerini sıralı olarak saklayan bir koleksiyon oluşturmaktadır. Sıralama işlemini ikili arama ağacı kullanarak yapmaktadır. Yukarıdaki örneğimiz de Anahtar-Değer çiftleri ekrana, Anahtar(Key) değerlerine göre sıralı bir şekilde yazılacaktır.

Küçük Veri Kümeleri Üzerinde Daha Etkili

Değinilmesi gereken bir diğer hususta; SortedList küçük veri kümeleri üzerinde iyi bir performans sergilerken, yüksek boyutlardaki veri kümelerinde daha düşük performans sergilemektedir. Eğer büyük bir veri kümesine sahipseniz SortedList yerine Dictionary sınıfını kullanabilirsiniz. SortedList, Dictionary’den daha kötü bir arama performansına sahiptir.

Metotlar ve Özellikler

  1. Nesne Oluşturma
    SortedList sınıfından bir nesne oluşturuyoruz. Bu nesne, koleksiyondaki nesnelerin referanslarını tutacaktır. Ayrıca koleksiyon içerisinde tutulacak Anahtar ve Değerin veri tipini önceden biliyorsak tıpkı Dictionary sınıfında yapmış olduğumuz gibi bir nesne oluşturabiliriz.
    SortedList SiraliKoleksiyon = new SortedList();
    
    // Dictionary sınıfında yapmış olduğumuz gibi bir nesne oluşturabiliriz.
    SortedList<int, string> SiraliKoleksiyon = new SortedList<int, string>();
  2. Add(Eklenecek_Anahtar, Eklenecek_Deger) Metodu
    Add() metodu ile koleksiyon içerisine Anahtar-Değer çiftlerini eklemekteyiz.
    SiraliKoleksiyon.Add(06, "Ankara");
  3. ContainsKey(Aranan_Anahtar) Metodu
    Koleksiyon içerisinde, parametre olarak girilen değerde bir Anahtar (Key) mevcutsa TRUE  değilse FALSE döndürecektir.
    SortedList SiraliKoleksiyon = new SortedList();
    
    SiraliKoleksiyon.Add(41, "Kocaeli");
    SiraliKoleksiyon.Add(54, "Sakarya");
    SiraliKoleksiyon.Add(25, "Erzurum");
    
    // Koleksiyonda "41" Anahtarı mevcut olduğu için TRUE döndürecektir.
    // Ekran çıktısı: Kocaeli
    if (SiraliKoleksiyon.ContainsKey(41))
        Console.WriteLine(SiraliKoleksiyon[41]);
    else
        Console.WriteLine("Anahtar Mevcut Değil.");
  4. ContainsValue(Aranan_Deger) Metodu
    Koleksiyon içerisinde, parametre olarak girilen ifadede bir Değer(Value) mevcutsa TRUE  değilse FALSE döndürecektir.
    SortedList SiraliKoleksiyon = new SortedList();
    
    SiraliKoleksiyon.Add(41, "Kocaeli");
    SiraliKoleksiyon.Add(54, "Sakarya");
    SiraliKoleksiyon.Add(25, "Erzurum");
    
    // Koleksiyonda "Sakarya" Değeri mevcut olduğu için TRUE döndürecektir.
    // Ekran çıktısı: Mevcut
    if (SiraliKoleksiyon.ContainsValue("Sakarya"))
        Console.WriteLine("Mevcut.");
    else
        Console.WriteLine("Mevcut Değil.");
  5. Clear() Metodu
    Koleksiyon içerisinde yer alan tüm Anahtar-Değer çiftlerini silmektedir.
    SiraliKoleksiyon.Clear();
  6. Remove(Anahtar) Metodu
    Koleksiyon içerisinde, parametre olarak girilen değerde bir Anahtar(Key) mevcutsa; Anahtarı ve anahtarla ilişkili Değeri silecektir.
    SiraliKoleksiyon.Remove(41);
  7. GetKeyList() Metodu ve Keys Özelliği
    Her ikisi de Anahtarları(Keys) içeren bir koleksiyon döndürmektedir.
    SortedList SiraliKoleksiyon = new SortedList();
    
    SiraliKoleksiyon.Add(41, "Kocaeli");
    SiraliKoleksiyon.Add(54, "Sakarya");
    SiraliKoleksiyon.Add(25, "Erzurum");
       
    IList Anahtarlar = SiraliKoleksiyon.GetKeyList();
    // ICollection Anahtarlar = SiraliKoleksiyon.Keys;
    
    foreach (var Anahtar in Anahtarlar)
        Console.WriteLine(Anahtar);
  8. GetValueList() Metodu ve Values Özelliği 
    Her ikisi de Değerleri(Values) içeren bir koleksiyon döndürmektedir.
    SortedList SiraliKoleksiyon = new SortedList();
    
    SiraliKoleksiyon.Add(41, "Kocaeli");
    SiraliKoleksiyon.Add(54, "Sakarya");
    SiraliKoleksiyon.Add(25, "Erzurum");
       
    IList Degerler = SiraliKoleksiyon.GetValueList();
    // ICollection Degerler = SiraliKoleksiyon.Values;
    
    foreach (var Deger in Degerler)
        Console.WriteLine(Deger);
  9. Count Özelliği
    Koleksiyon içerisinde bulunan anahtar-değer çiftlerinin sayısını döndürmektedir.
    int ElemanSayisi = SiraliKoleksiyon.Count
  10. GetByIndex(indeks) ve  GetKey(indeks) Metotları
    SortedList’de Değerlere, Anahtar ile erişebildiğimiz gibi indeks ile de erişebiliriz. GetByIndex() Metodu parametre olarak girilen indeksteki Değeri döndürür. GetKey(indeks) metodu ise parametre olarak girilen indeksteki Anahtarı döndürür.
    SortedList SiraliKoleksiyon = new SortedList();
    
    SiraliKoleksiyon.Add(41, "Kocaeli");
    SiraliKoleksiyon.Add(54, "Sakarya");
    SiraliKoleksiyon.Add(25, "Erzurum");
    
    for (int i = 0; i < SiraliKoleksiyon.Count; i++)
        Console.WriteLine("Anahtar:{0} - Değer:{1}",SiraliKoleksiyon.GetKey(i),SiraliKoleksiyon.GetByIndex(i));
  11. IndexOfKey(Anahtar) ve IndexOfValue(Değer) Metotları
    IndexOfKey() metodu parametre olarak girilen Anahtarın indeksini döndürür. IndexOfValue() metodu ise parametre olarak girilen Değerin indeksini döndürür. Parametre olarak girilen Anahtar veya Değer koleksiyonda mevcut değilse -1 döndürürler.
    SortedList SiraliKoleksiyon = new SortedList();
    
    SiraliKoleksiyon.Add(41, "Kocaeli");
    SiraliKoleksiyon.Add(54, "Sakarya");
    SiraliKoleksiyon.Add(25, "Erzurum");
    
    IList Anahtarlar = SiraliKoleksiyon.GetKeyList();
    IList Degerler = SiraliKoleksiyon.GetValueList();
    
    // Her bir Anahtar ve Anahtarın indeksi ekrana yazdırıldı.
    foreach(var Anahtar in Anahtarlar)
        Console.WriteLine("Anahtar:{0} - İndeks:{1}", Anahtar, SiraliKoleksiyon.IndexOfKey(Anahtar));
    
    // Her bir Değer ve Değerin indeksi ekrana yazdırıldı.
    foreach(var Deger in Degerler)
        Console.WriteLine("Deger:{0} - İndeks:{1}", Deger, SiraliKoleksiyon.IndexOfValue(Deger));
  12. SetByIndex(i, val) Metodu
    i. indeksteki Değere “val” değişkeninin değerini atar.
    SortedList SiraliKoleksiyon = new SortedList();
    
    SiraliKoleksiyon.Add(25, "Erzurum");
    SiraliKoleksiyon.Add(41, "Kocaeli");
    SiraliKoleksiyon.Add(54, "Sakarya");
                
    // 1. indekste bulunan "Kocaeli" Değeri "İzmit" olarak değiştirildi. 
    var YeniDeger = "İzmit";
    SiraliKoleksiyon.SetByIndex(1, YeniDeger);
  13. DictionaryEntry yapısı
    Hastable sınıfında olduğu gibi SortedList sınıfında da Anahtar-Değer çiftlerini bir DictionaryEntry yapısında tutabiliriz.
    SortedList SiraliKoleksiyon = new SortedList();
    
    SiraliKoleksiyon.Add(25, "Erzurum");
    SiraliKoleksiyon.Add(41, "Kocaeli");
    SiraliKoleksiyon.Add(54, "Sakarya");
    
    foreach (DictionaryEntry oge in SiraliKoleksiyon)
        Console.WriteLine("Anahtar:{0} - Değer:{1}", oge.Key, oge.Value);

Serdar Yılmaz

Exit mobile version