Ana Sayfa > C#, Programlama > Listede Filtreleme Yapmanın İyi – Kötü – Çirkin Yolu

Listede Filtreleme Yapmanın İyi – Kötü – Çirkin Yolu

15 Ocak 2010

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:



  1. Ocak 18th, 2010 at 14:40 | #1

    İ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; });
    }