Listede Filtreleme Yapmanın İyi – Kötü – Çirkin Yolu
15 Ocak 2010
1 Yorum
Bütün gün, dizilerde filtrelemeler yaptıktan sonra, bu konu ile ilgili bir yazı yazmaya karar verdim. Elimizde bir List<int> olsun, dizideki 0‘dan büyük rakamları döndüren fonksiyon yazmak istediğimizi varsayalım;
Önce Kötü Yol;
private static List<int> FiltrelemeninKotuYolu(List<int> t)
{
List<int> arrReturn = new List<int>();
foreach (int i in t)
{
if (i > 0)
{
arrReturn.Add(i);
}
}
return arrReturn;
}
Umarım artık böyle kodlar yazmıyorsunuzdur!!..
Çirkin Yol;
Önce bir Predicate Function tanımlarız;
private static bool Karsilastir(int i)
{
if (i > 0)
{
return true;
}
return false;
}
Sonra, Predicate Function‘ı kullanırız;
private static List<int> FiltrelemeninCirkinYolu(List<int> t)
{
Predicate<int> pred = new Predicate<int>(Karsilastir);
return t.FindAll(pred);
}
Kötü Yol‘dan daha doğru olduğu ortada, ama Güzel bir yol değil.
Son olarak İyi Yol;
private static List<int> FiltrelemeninIyiYolu(List<int> t)
{
return t.FindAll(n => n > 0);
}
İyi Yol aslında sadece Çirkin Yol‘un iyileştirilmiş hali. Predicate Method kullanacağımıza Lambda Expression kullanıyoruz. n => n > 0 : n‘nin 0‘dan büyük olduğu durumlar anlamına geliyor.