Serdar YILMAZ
Bizimkisi Bir “Bug” Hikayesi...
Serdivan/Sakarya

Etiket 'Koleksiyonlarda Sıralama'

IComparable ve IComparer Arayüzleri

dotnetGenel amaçlı koleksiyonlar içerisinde veri tipi fark etmeksizin her türlü veriyi saklayabiliriz. İnt, string, char gibi standart tiplerdeki verilerle birlikte; yazmış olduğumuz sınıflardan elde ettiğimiz nesneleri de koleksiyonlar içerisinde tutabiliriz. Konuya ilişkin bir örnek vermek gerekirse;

Yukarıdaki örneğimizde; “Ogrenci” sınıfından oluşturduğumuz nesneleri ArrayList koleksiyonunda sakladık ve foreach döngüsünü kullanarak koleksiyon içerisinde yer alan nesnelere ait bilgileri ekrana yazdırdık. Ekran çıktısı:

No:128                  İsim:Serdar Yılmaz        Sınıf:8
No:134                  İsim:Ümit Özkan           Sınıf:7
No:115                  İsim:Kadir Aydemir       Sınıf:6

Görüldüğü üzere koleksiyon içerisinde, yazmış olduğumuz sınıfa ait nesneleri rahatlıkla tutabilmekteyiz. Ancak bu koleksiyonu sıralamak istediğimizde hata verecektir çünkü koleksiyon, içerisinde bulunan nesneleri neye göre sıralayacağı (Numaraya göre mi, isme göre mi, sınıfa göre mi) bilgisine sahip değildir. Kendi oluşturduğumuz sınıflara ait nesnelerin bir koleksiyon tarafından sıralanmasına imkan vermek amacıyla IComparable veya IComparer arayüzlerini kullanabiliriz.

IComparable Arayüzü

IComparable arayüzü içerisinde tek bir metot tanımlanmıştır.

  1. CompareTo(object nesne)
    Nesnelerin neye göre sıralanacağını bu metot ile belirlemekteyiz. Metodu çağıran nesne ile argüman olarak girilen nesneyi karşılaştırmaktadır.

IComparer Arayüzü

IComparer arayüzü içerisinde tek bir metot tanımlanmıştır. IComparable arayüzünden farkı; Arayüzü kendi oluşturduğumuz sınıfa uygulamak yerine ayrı bir sınıf oluşturup ona uygulamaktayız. Oluşturduğumuz yeni sınıftan bir nesne elde edip, Sort() metoduna parametre olarak vererek sıralama işlemini gerçekleştirmekteyiz.

  1. Compare(object nesne1, object nesne2)
    Nesne 1 ile Nesne 2’yi karşılaştırarak sıralama işleminin yapılmasını sağlamaktadır.

Serdar YILMAZ