20.06.16 21:22
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: LINQ Örnekleri makalelerinde kullanılan verikaynağı LINQ (Language Integrated Query - Dile Entegre Edilmiş Sorgu) Nedir? LINQ Sağlayıcıları (LINQ Providers) LINQ Yöntem Sözdizimi (LINQ Method Syntax) LINQ - Temel İşlemler - Bir Veri Kaynağı Bildirme ve Seçme (From ve Select) LINQ - Temel İşlemler - Süzme (Filtering) LINQ - Temel İşlemler - Sıralama (Ordering) LINQ - Temel İşlemler - Gruplama (Grouping) LINQ - Temel İşlemler - Birleştirme (Joining) LINQ - Deferred Execution - Ertelenmiş Çalıştırma LINQ - Immediate Execution - Anında Çalıştırma LINQ - Query Reuse - Sorgunun Yeniden Kullanımı LINQ - Kısıtlama (Restriction) Kullanım Örnekleri LINQ - Yansıtma (Projection) - Select Kullanım Örnekleri LINQ - Yansıtma (Projection) - SelectMany Kullanım Örnekleri LINQ - Bölümleme (Partitioning) Örnekleri LINQ - Sıralama (Ordering) Örnekleri LINQ - Gruplama (Grouping) Örnekleri LINQ - Küme (Set) Örnekleri LINQ - Dönüşüm (Conversion) Örnekleri LINQ - Eleman (Element) Seçimi Örnekleri LINQ - Oluşturma (Generation) Örnekleri LINQ - Miktar Belirleyiciler (Quantifiers) Örnekleri LINQ - Yığın (Aggregate) Örnekleri LINQ - Birleştirme (Join) İşlemleri LINQ - Özel Dizilim (Custom Sequence) Örneği (Bu makale) LINQ - Concat ve SequenceEqual İle Örnekle r
Ekleyen: canora
Değiştiren: canora
10.04.16 23:42
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
Ekleyen: canora