Todictionary | Engin Polat\'ın Windows 8 , Windows Phone 8 ve C# içerikli programcılık sitesi

Arşiv

Etiketlenen yazılar todictionary

Generic Dictionary sınıfına karıştırıcı (shuffle) Extension Method yazalım

03 October 2011 Yorum yapılmamış

Winamp MP3 oynatıcısında çalma listesini (playlist) rastgele sıra ile karıştırabiliyorsunuz. Benzer özelliği kendi projelerimizde uygulamak isteyebiliriz.

Daha önce, C# ile Dizi Karıştırma yazısında bir dizi’yi (List<T>) nasıl karıştıracağımızı incelemiştik.

Bu yazı ile Karıştırma (Shuffle) yeteneğini Generic Dictionary (Dictionary<TKey, TValue>) ekleyeceğimizi inceleyeceğiz.

İlk olarak, ExtensionManager isminde static bir sınıf oluşturalım;

public static class ExtensionManager
{
	public static Dictionary<TKey, TValue> Shuffle(this Dictionary<TKey, TValue> liste)
	{
		Random r = new Random();
		return liste.OrderBy(x => r.Next()).ToDictionary(item => item.Key, item => item.Value);
	}
}

ExtensionManager sınıfının Shuffle() isminde bir method’u var.

Bu method, Random sınıfından yeni bir instance‘ın Next() method’unu kullanarak, liste değişkeninin her bir elemanını rastgele bir değerle sıralıyor.

Böylece, Shuffle() method’u her çağırıldığında liste değişkeninin elemanlarının rastgele sıralandığını görüyoruz.

Örnek Kullanım;

Dictionary<int, string> liste = new Dictionary<int, string>();

for (int iLoop = 0; iLoop < 5; iLoop++)
{
	liste.Add(iLoop, "Eleman " + iLoop);
}
//0, Eleman 0
//1, Eleman 1
//2, Eleman 2
//3, Eleman 3
//4, Eleman 4

Dictionary<int, string> karistirilmis = liste.Shuffle();
//2, Eleman 2
//1, Eleman 1
//3, Eleman 3
//0, Eleman 0
//4, Eleman 4

C# ile LINQ filtrelerinin üç farklı kullanımı (Predicate Function, Anonymous Method, Lambda Expression)

23 May 2011 Yorum yapılmamış

Listeler (IEnumerable<T> interface’ini implemente eden) üzerinde filtreleme yapmak için .Net 3.0’dan beri LINQ sorgularını kullanabiliyoruz.

LINQ ile gelen farklı operatör grupları sayesinde, listeler üzerinde sadece filtreleme yapmanın ötesinde bir kontrolümüz oluyor (daha detaylı bilgi için MSDN’de yeralan The .Net Standard Query Operators makalesini okuyabilirsiniz);

Bu yazımda, bir liste uzerinde LINQ sorgusu gerçekleştirmenin 3 farklı yolunu inceleyeceğiz;

  • Predicate
  • Anonymous Method
  • Lambda Sorgusu

Öncelikle üzerinde çalışacağımız bir listeye ihtiyacımız olacak, Enumerable sınıfının static Range method’u ile iki değer aralığındaki tam sayılardan oluşan listeyi kullanabiliriz;

Enumerable.Range(50, 100);

Predicate

private static bool CiftSayiKontrol(int Rakam)
{
	if (Rakam % 2 == 0)
		return true;
	else
		return false;
}

public static void Main(string[] args)
{
	var SonucListe = Enumerable.Range(1, 20).Where(CiftSayiKontrol);
	foreach (var Rakam in SonucListe)
	{
		Console.WriteLine(Rakam);
	}

	Console.ReadLine();
}

Sonuç;

LINQ Sorgusu - Predicate Function

Anonymous Method

public static void Main(string[] args)
{
	var SonucListe = Enumerable.Range(1, 20).Where(delegate(int number) {
		if (number % 2 == 0)
			return true;
		else
			return false;
	});

	foreach (var Rakam in SonucListe)
	{
		Console.WriteLine(Rakam);
	}

	Console.ReadLine();
}

LINQ Sorgusu - Anonymous Method

Lambda Sorgusu

public static void Main(string[] args)
{
	var SonucListe = Enumerable.Range(1, 20).Where(Rakam => Rakam % 2 == 0);
	foreach (var Rakam in SonucListe)
	{
		Console.WriteLine(Rakam);
	}

	Console.ReadLine();
}

LINQ Sorgusu - Lambda Expression