Yazılım.
CevapSitesi.com Beta!
Çözüm Noktası
Facebook, Twitter, Google+ veya e-posta ile paylaşın.
| Sorular | Makaleler | Üyeler | Etiketler  | İletişim
Soru sormak ya da cevap vermek için;
giriş yapın veya üye olun.

Sosyal medya hesaplarınızla da giriş yapabilirsiniz.
0

LINQ - Özel Dizilim (Custom Sequence) Örneği

LINQ ile kendi tanımladığınız işlemler sonucu oluşturulacak dizilimler elde edebiliriz.

Bu örnek, iki tamsayı dizisinin skaler çarpımını (her iki dizinin aynı sıradaki elemanlarının çarpımının toplamını) bulur.

Örnekte bu işlem için IEnuberable<int> arayüzüne yeni bir yöntem ekleyen bir genişleme yöntemi ve bu bu yönteme gönderilen, yapılacak işlemi bildirmek için Lambda İfadesi şeklinde tanımlanan bir isimsiz fonksiyondan yararlanılmaktadır.

İsimsiz fonksiyonda kullanılan yield komutu, IEnumerable arayüzünü (Enumerable = Sayılabilir) uygulayan ve dolayısıyla GetEnumerator yöntemine sahip sınıflarda koleksiyonun her bir elemanı çağırıldığında gerekli işlemi yaptıktan sonra işlem sonucunu döndürmek ve tekrar kendi döngüsüne dönülmesi için kullanılır.

http://Bu örneği daha iyi anlayabilmek için Genişletme Yöntemleri ve Lambda İfadeleri yazılarımı inceleyebilirsiniz

// Bu sınıf IEnumerable<int> arayüzünü genişleten bir yöntem tanımlar.
public static class OzelSilsileIslecleri
{
    public static IEnumerable<int> Katistir(this IEnumerable<int> birinci,
                                                 IEnumerable<int> ikinci,
                                                 Func<int, int, int> fonksiyon)
    {

        IEnumerator<int> Sayici1 = birinci.GetEnumerator();

        IEnumerator<int> Sayici2 = ikinci.GetEnumerator();

        while (Sayici1.MoveNext() && Sayici2.MoveNext())
        {
            yield return fonksiyon(Sayici1.Current, Sayici2.Current);
        }

    }
}
Console.ReadLine();
int[] VectorA = { 0, 2, 4, 5, 6 };

int[] VectorB = { 1, 3, 5, 7, 8 };

IEnumerable CarpimDizisi = VectorA.Katistir(VectorB, (a, b) => a * b);

int SkalerCarpim = CarpimDizisi.Sum();

Console.Write("Çarpım dizisi : ");

foreach (int Carpim in CarpimDizisi)
{
    Console.Write(Carpim);
    Console.Write(" ");
}

Console.WriteLine();

Console.WriteLine("Vektörlerin skaler çarpımı = {0}", SkalerCarpim);

Console.ReadLine();

Örneğin çıktısı şöyle olacaktır :

Çarpım dizisi : 0 6 20 35 48 
Vektörlerin skaler çarpımı = 109

Kaynak:
https://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b



Diğer LINQ Makaleleri:


Yazan: 10.04.16 23:42

101,387p 4ü