C#

C# SortedList Sınıfı

Merhabalar, C# derslerimize kaldığımız yerden devam ediyoruz. Bu dersimizde SortedList sınıfını anlatacağım.
SortedList sınıfı System.Collections kütüphanesi altında bulunan bir sınıf ve tıpkı bir önceki yazımda anlattığım HashTable sınıfı gibi liste özelliği göstermekte ve hatta HashTable listesinin sahip olduğu tüm fonksiyon ve özelliklere sahip. Tabi kendine ait özellik ve fonksiyonları da bulunmakta fakat iki sınıfı birbirinden ayıran en önemli özellik SortedList listesine eklediğimiz veriler alfabetik olarak küçükten büyüğe sıralanıyor. Fakat key değerlerinin aynı tipte olması gerekiyor. Yani key değerlerinin hepsi integer tipte olması yada hepsinin string tipte olması yada hepsinin double tipte olması, …. gibi. İki farklı tipte veri eklerseniz InvalidOperationException adlı bir istisnayı çaatt diye fırlatıyor 🙂
İşte bu yüzden sadece aynı tipte veriniz varsa veya olacaksa ve bunları alfabetik olarak sıralayacaksanız SortedList kullanın, aksi halde HashTable, ArrayList gibi sınıfları kullanmak daha iyi olacaktır.

Şimdi SortedList sınıfına ait olan özellik ve fonksiyonları sırasıyla anlatalım ama öncesinde bir tane SortedList nesnesi oluşturalım.
SortedList liste = new SortedList();
Add() Fonksiyonu: Bu fonksiyon adından da anlaşılacağı üzere liste içerisine ekleme yapmamızı sağlıyor ve object tipinde bir key ve yine object tipinde bir value değerini parametre olarak alıyor. Add() fonksiyonu ile eklenen veriler hemencicik alfabetik olarak sıralanıyor ve eklenen verinin tipi ile listede halihazırda var olan verilerin tipi farklı ise hata fırlatıyor.
liste.Add("softwaresup", "net");
liste.Add("key", "value");
liste.Add("csharp", 9.0);
Gördüğünüz gibi tüm key değerleri string tipte fakat value değerlerinden bir tanesi double tipte. Yani aynı tip olma zorunluluğu sadece key değerleri için var, value değerlerini istediğimiz tipte yapabiliriz.
Keys Özelliği: Bu özellik ile liste içerisine eklenmiş olan key değerlerini IList tipinde bir liste olarak alabiliyoruz ve sonrasında foreach döngüsü ile elemanlar üzerinde manipülasyon ve işleme yapabiliriz.
foreach(var key in liste.Keys)
    Console.WriteLine(key);
Bu kodun çıktısı şöyle olacaktır;
C# SortedList Sınıfı
Values Özelliği: Bu property ile liste içerisindeki value değerlerini IList listesi olarak alabilir ve tıpkı Keys özelliğinden gelen IList gibi istediğimiz işlemi yapabiliriz.
foreach(var value in liste.Values)
    Console.WriteLine(value);
kod parçasının çıktısıda şöyle olmalı;
C# SortedList Sınıfı
Contains() ve ContainsKey() Fonksiyonları: Bu iki fonksiyonda aynı görevi görüyor. Görevleri ise, istenilen bir key değerini liste içerisindeki key değerleri arasında aramak. Aranan değer key değerleri arasında varsa yani listeye key olarak eklenmişse true, aksi halde false döndürüyor.
ContainsKey() fonksiyonu SortedList sınıfına ait bir fonksiyon iken, Contains() fonksiyonu object tipinden geliyor ve C#’taki tüm veri tipleri ve sınıflar için ortak bir fonksiyon. Fakat ben sınıfın kendisine ait olan fonksiyonu kullanmayı tercih ediyorum ve birazdan örnekleri de ContainsKey() fonksiyonu üzerinden vereceğim fakat siz isterseniz Contains() fonksiyonunu da kullanabilirsiniz.
Console.WriteLine(liste.ContainsKey("softwaresup"));
Console.WriteLine(liste.ContainsKey("net"));
Console.WriteLine(liste.ContainsKey("suforce"));
Bu kodların çıktısıda şöyle olacaktır;
C# SortedList Sınıfı
SortedList içerisinde softwaresup isimli bir key olduğu için true, net ve suforce isimli key olmadığı içinde false döndürmüştür.
ContainsValue() Fonksiyonu: Bu fonksiyon liste içerisinde value değeri aramamızı sağlıyor yani istenilen bir değer listeye value olarak eklenmişse true, eklenmemişse false döndürüyor.
C# SortedList Sınıfı
Burada da liste içerisinde net isimli value olduğu için true, softwaresup ve suforce isimli value değeri olmadığı için false döndürmüştür.
Remove() Fonksiyonu: Liste içerisine veri ekleme olduğu gibi listenin içinden veri çıkarma işlemi de yapabiliyoruz ve bunuda Remove() fonksiyonu ile yapabilmekteyiz. Bu fonksiyon object tipte key değerini alıyor ve void tipte yani geriye herhangi birşey döndürmediği için parametre olarak gönderilen isimde bir key değeri varsa, o key değerinin bağlı olduğu veriyi siliyor. Parametre olarak gönderilen key değerine karşılık gelen bir veri yoksa da herhangi bir işlem yapmıyor.
RemoveAt() Fonksiyonu: Liste içerisinden veri silmenin bir diğer yolu ise RemoveAt() fonksiyonu. Bu fonksiyonu Remove() fonksiyonundan ayıran şey ise integer tipte silmek istediğimiz verinin index numarasını parametre olarak alması.
Listenin elemanları key değerleri üzerinden tutuluyor fakat biz belirlemesekte aslında her elemanın tıpkı dizilerde olduğu gibi bir index numarası var ve biz sileceğimiz verinin key değerini bilmiyorda index numarasını biliyorsak, index numarası üzerinden de veriyi silebiliyoruz.
Örneğin Add() fonksiyonunu anlattırken verdiğim SortedList listesini düşünelim. softwaresup-net çiftinin index numarası 0, key-value çiftinin index numarası 1 ve csharp-9.0 çiftinin index numarası ise 2’dir. Ben key-value çiftini liste içerisinden silmek istersem
liste.RemoveAt(1);
kod satırını yazmam gerekiyor.
Dikkat etmemiz gereken şey ise sildiğimiz elemandan sonra gelen elemanların index numaraları 1 azaltılıyor, yani listede kaydırma yapılıyor.
Örneğin bizim listemizde key-value çiftini sildiğimiz zaman 1 numaralı index boş kalmıyor, 2 index numarasına sahip olan csharp-9.0 çiftinin index numarası 1 azaltılarak 1 oluyor ve eğer sonrasında veri olsaydı onların index numaralarıda 1 azaltılacaktı. Count Özelliği: Bu özellik sayesinde liste içerisinde kaç tane key-value çifti olduğunu öğrenebiliyoruz yani listenin eleman sayısını integer tipte veriyor.
GetByIndex() Fonksiyonu: Index numarasını bildiğimiz veri çiftinin value değerini almak için kullanılan bu fonksiyon integer tipte 1 tane parametre alıyor ve geriye object tipinde value değerini döndürüyor. Object tipinde döndürmesinin sebebi ise listeye her türden verinin eklenebilmesinden kaynaklanıyor. Yani listeye eklenen her veri object tipine çevriliyor ve elbette geriye de object tipinde nesne döndürülüyor.
Verinin gerçek veri tipini biliyorsanız o tip için kullanılan cast yani çevirme fonksiyonlarını kullanarak veriyi gerçek veri tipine çevirebilirsiniz. Şöyle bir örnekle ne demek istediğimi C# ile anlatayım;
double sayi = Convert.ToDouble(liste.GetByIndex(2));
string str = liste.GetByIndex(1).ToString();
GetKey() Fonksiyonu: Bu fonksiyon liste içerisinde index numarasını bildiğiniz verinin object tipte key değerini döndürüyor. GetByIndex() fonksiyonunda olduğu gibi key değerini orijinal tipinde kullanmak isterseniz verinin gerçek tipine elle dönüştürmeniz gerekmekte.
GetKeyList() Fonksiyonu: GetKey() fonksiyonu ile liste içerisinden index numarasını bildiğimiz verinin key değerini alabiliyorduk, peki liste içerisindeki tüm key değerlerini öğrenmek istersek ne yapacağız ? İşte burada GetKeyList() fonksiyonu devreye giriyor ve liste içerisindeki tüm key değerlerini bize IList tipinde ayrıca bir liste olarak veriyor. Sonrasında siz isterseniz foreach yada farklı bir döngüyle key değerleri üzerinde işlem yapabilirsiniz. Fakat yaptığınız değişiklikler liste içerisineki key değerlerine etki etmez. Örneğin ben bizim listemiz içerisindeki key değerlerini ekrana yazdırayım;
foreach(var key in liste.GetKeyList())
    Console.WriteLine(key);
GetValueList() Fonksiyonu: Bu fonksiyonla da liste içerisindeki tüm value değerlerini IList tipinde bir liste olarak alabiliyoruz ve yine döngü yardımıyla tüm elemanlar üzerinde gezerek istediğimiz işlemi yapabiliyoruz. GetKeyList() fonksiyonunda olduğu gibi GetValueList() fonksiyonundan aldığımız value değerleri üzerinde yaptığımız değişiklikler liste içerisindeki value değerlerine yansımamaktadır. Bu seferde value değerlerini ekrana bastırayım;
foreach(var value in liste.GetValueList())
    Console.WriteLine(value);
IndexOfKey() Fonksiyonu: Liste içerisinde aradığımız bir key değerinin index numarasını geri döndüren bu fonksiyon, aranan key değeri liste içerisinde varsa bulunduğu index numarasını, yoksa da -1 değerini döndürüyor. Fakat dikkat edilmesi gereken şey; SortedList listeleri yığın özelliği gösterdiğinden yani son giren ilk çıkar mantığında olduğundan ve aramaya da en üstten başlandığından listeye en son eklediğiniz verinin index numarası 0, en önce eklediğiniz verinin index numarasıda listenin eleman sayısının 1 eksiği olacaktır. Örneğin bizim listemizde softwaresup key değerinin index numarasını 2, csharp key değerinin index numarasını da 2 olarak verecektir.
IndexOfValue() Fonksiyonu: Liste içerisinden aradığını bir value değerinin listedeki ilk bulunduğu index numarasını döndürmekte ve aradığınız değer liste içinde varsa bulunduğu index numarasını, yoksa -1 değerini döndürür.
Value değerleri aynı olabildiği için ilk bulunan yerdeki index numarasını döndürür.
SetByIndex() Fonksiyonu: Bu fonksiyon ile liste içerisindeki herhangi bir verinin value değerini değiştirebilirsiniz. Parametre olarak ise integer tipte değiştirmek istediğiniz verinin index numarasını ve object tipte yeni value değerini alıyor ve void tipte olduğu için geriye herhangi birşey döndürmemekte. Dikkat edilmesi gereken nokta ise, birinci parametrede gönderdiğiniz index numarasına karşılık gelen bir veri yoksa ArgumentOutOfRangeException istisnası fırlatıyor.
Value değerini değiştirmek istediğiniz verinin index numarasını bilmiyorsanız IndexOfKey() fonksiyonu ile beraber kullanabilirsiniz. Örneğin ben oluşturmuş olduğum listedeki csharp key değerine sahip olan verinin value değerini nodejs olarak değiştirmek istediğimde şöyle yapabilirim;
liste.SetByIndex(liste.IndexOfKey("csharp"), "nodejs");
Bu kod satırında SetByIndex() fonksiyonu ile value değerini değiştir dedik ama değerini bildiğimiz key değerinin index numarasını da IndexOfKey() fonksiyonu ile bulduk.
Hatta Linq ile işi biraz daha ileri götürürsek;
liste.Keys.Cast<object>().ToList().ForEach(x => liste.SetByIndex(liste.IndexOfKey(x), "SoftwareSup.Net"));
gibi kısacık bir çevirme ve sonrasında foreach döngüsüyle tüm value değerlerini değiştirebiliriz.
Clear() Fonksiyonu: Bu fonksiyon ile listenin içini boşaltabilir yani tüm verileri silebiliriz. Fakat oluşturduğumuz listenin nesnesine herhangi bir manipülasyonda bulunmaz, sadece içerisindeki verileri siler.

Evet bu dersimizde bu kadardı, SortedList sınıfı ve kullanımını güzel bir şekilde anlatabildiğimi düşünüyorum 🙂
Tüm C# derslerimize buraya tıklayarak ulaşabilirsiniz. Herkese hayırlı günler.
Skorumuz:
Oy Vermek İçin Tıklayın
[Toplam: 0 Ortalama: 0]

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Başa dön tuşu