Listede Filtreleme Yapmanın İyi – Kötü – Çirkin Yolu
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.
İlgili diğer başlıklar:
- C# ile Dizi Karıştırma
- Kelimenin son harfi ile başlayan kelime oyunu
- C# ile Dizi Bölümleme
- C# ile LINQ filtrelerinin üç farklı kullanımı (Predicate Function, Anonymous Method, Lambda Expression)
- C# ile Image Crawler Uygulaması
- C# Partial Method Desteği
- C# ile Google PageRank Bulma
- C# Auto-Implemented Properties Özelliği
- C# ile isNumeric() fonksiyonu yazalım
- VB.NET’te anahtar kelimeyi değişken ismi olarak kullanma
İyi yol olarak belirttiğin yol .Net Framework 3.5 ve sonraki sürümlerde çalışır. Lambda ifadeler ve LINQ .Net Framework 3.5 ile birlikte hayatımıza girdi.
.Net 2.0 ile “İyi Yol” ‘u şu şekilde yazabiliriz;
private static List FiltrelemeninIkiSifirYolu(List t) { return t.FindAll(delegate(int i) { return i > 0; }); }