C# IComparer Interface

Merhaba arkadaşlar,

Collections nesnelerini daha iyi anlamak için System.Collection isim alanında bulunan arayüzleri tanımaya devam ediyoruz. Bir önceki yazımda ICollection arayüzünü incelemiştik. (IColletion yazım için tıkla)

Bu yazımda System.Collection isim alanında bulunan bir diğer arayüz olan IComparer nedir, ne işe yarar ve kendi Comparer sınıfımızı yazıp konuyu ele alacağız . Eğer C#’taki Colletion hakkında bilginiz yok ve ufaktan bir şeyler okumak istiyorsanız sizi C# Collections yazıma davet ediyorum. Artık işe koyulalım 🙂

IComparer, iki nesnenin nasıl karşılaştırılacağını uygular. IComparer arayüzünü buradan daha detaylı inceleyebilirsiniz. Bu arayüzü uyguladığımız zaman Compare metodu karşımıza çıkar. Compare metodu iki nesneyi karşılaştırır ve geriye int değerinde bir sayı döner. Elimizde iki nesneyi karşılaştıracağımız örnek olsun. İlk nesenmiz x diğer nesnemiz y olsun. Eğer x nesnemiz y nesnemiz den küçük ise 0’dan küçük, x nesnemiz y nesnemize eşit ise 0’a eşit ve x nesnemiz y nesnemiz den büyük ise 0’dan büyük bir sayı döner. Bunu bir örnekle açıklamak istersek;

String sınıfının CompareTo metodunu kullanarak yukarıda bahsettiğimiz örneği yapalım. A ve B string değerlerini karşılaştırıyor olacağız.

“A” değeri “B” değerinden küçük olduğu için -1, “B” değeri “A” değerinden büyük olduğu için 1 ve “A” değeri “A” değerinden eşit olduğu için ekrana 0 yazmıştır. Amaç IComparer arayüzüne ısınmak 🙂

Hadi şimdi kendi karşılaştırıcı sınıfımızı oluşturup örnek ile pekiştirelim. Aklıma String sınıfının Substring() metodunun işlevi geldi. Bizim de sınıfımız iki parametre alacak. Birinci parametre hangi index’den başlayacağı diğer parametre ise uzunluk yani kaç karakter uzunluğu karşılaştırılacak. Örnek üzerinde gösterecek olursak;

Özetleyecek olursak IComparer arayüzünü SubstringComparer sınıfımıza uyguladık ve Compare metodunu kendi iş akışımıza göre geliştirdik. Compare metodunu yapıcı metot ile gönderdiğimiz parametreler ile iki nesnenin hangi indexten başlayıp kaç karakter karşılaştırılacağını uygulayıp 2 nesneyi String sınıfının CompareTo metodu ile karşılaştırdık. String değeri alan bir dizi oluşturduk ve dizinin içine elemanları ekledik. Array sınıfının yardımı ile Sort() metodunu kendi geliştirdiğimiz karşılaştırıcı sınıfımızı parametre olarak gönderip dizinin bizim belirlediğimiz çalışma prensibine göre sıraladık.

Karşılaştırıcılar Koleksiyon nesnelerimiz için işlevsel özellikler sunuyor. Bu yazımızda Klasik tipli koleksiyonlarda IComparer arayüzünün işlevini ve nasıl uygulanması gerektiğini görmüş olduk.

Bir sonraki yazımda System.Collection isim alanında bulunan IDictionary arayüzünnden bahsedip örnek bir uygulama ile pekiştiriyor olacağız.

Kaynaklar:

Her Yönüyle C# 7.0, Sefer Algan, Pusula Yayincilik

https://docs.microsoft.com/tr-tr/dotnet/api/system.collections.icomparer?view=netframework-4.8

https://docs.microsoft.com/tr-tr/dotnet/csharp/programming-guide/concepts/collections

Leave a Comment