using System;
using System.Collections.Generic;
using System.Linq;
public class Program
{
public static void Main()
{
var Sonlar = new List<int> {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
var kvsumma = Sonlar.Select( son=>son * son )
.Aggregate( (int x, int y) => { return x + y; } );
Console.WriteLine( kvsumma);
Console.ReadKey();
}
}
Dastur natijasi:
Izoh: yuqoridagi kod 1 dan 10 gacha bo'lgan raqamlarning kvadratlari yig'indisini chiqaradi. Birinchi lambda ifodasi ro'yxatdagi raqamlarni kvadratga ajratadi.
Faqat bitta parametr mavjud bo'lgan qavs qoldirilishi mumkin. Agar xohlasangiz, siz qavs qo'shishingiz mumkin:
.Select( (number) => number * number);
yoki parametrni aniq yozing, ammo keyin qavs kerak bo'ladi:
.Select( (int number) => number * number);
Lambda tanasi ifodadir va yashirin qaytishga ega. Agar xohlasangiz, siz ham bayonot tanasini ishlatishingiz mumkin. Bu yanada murakkab lambdalar uchun foydalidir.
.Select( number => { return number * number; } );
Tanlash usuli hisoblangan qiymatlar bilan yangi IEnumerable qiymatini qaytaradi.
Ikkinchi lambda ifodasi tanlangan usuldan qaytarilgan ro'yxatdagi raqamlarni yig'adi. Qavslar talab qilinadi, chunki bir nechta parametrlar mavjud. Parametrlarning turlari aniq yozilgan, ammo bu kerak emas. Quyidagi usul tengdir.
.Aggregate( (first, second) => { return first + second; } );
Bu xuddi shunday:
.Aggregate( (int first, int second) => first + second );
Func square = x => x * x;
Console.WriteLine(square(5));
// Output:
// 25
System.Linq.Expressions.Expression> e = x => x * x;
Console.WriteLine(e);
// Output:
// x => (x * x)
Har qanday lambda ifodasi delegat turiga aylantirilishi mumkin. Lambda ifodasi o'zgartirilishi mumkin bo'lgan delegat turi uning parametrlari va qaytish qiymati bilan belgilanadi. Agar lambda ifodasi qiymatni qaytarmasa, uni ActionDelegat turlaridan biriga o'tkazish mumkin; aks holda, u FuncDelegatlarning turlaridan biriga aylantirilishi mumkin. Masalan, ikkita parametrga ega va hech qanday qiymatga ega bo'lmagan lambda ifodasi Action vakiliga aylantirilishi mumkin. Bitta parametrga ega va qiymatni qaytaradigan lambda ifodasi Func vakiliga aylantirilishi mumkin. Quyidagi misolda x=>x*x nomlangan x va qiymatini qaytaradigan parametrni belgilaydigan lambda ifodasi x kvadrat shaklida, delegat turidagi o'zgaruvchiga tayinlangan:
Func square = x => x * x;
Console.WriteLine(square(5));
// Output:
// 25
Lambda-ifodalari, shuningdek , quyidagi misolda ko'rsatilganidek, daraxt-ifodasi turlariga o'tkazilishi mumkin:
System.Linq.Expressions.Expression> e = x => x * x;
Console.WriteLine(e);
// Output:
// x => (x * x)
Siz fonda bajarilishi kerak bo'lgan kodni o'tkazish uchun Task.Run(Action) usuliga argument sifatida delegat turlari yoki ifoda daraxtlari misollarini talab qiladigan har qanday kodda lambda ifodalarini ishlatishingiz mumkin. Quyidagi misolda ko'rsatilganidek , siz LINQni C# dasturlash tilida yozganda lambda ifodalarini ishlatishingiz mumkin :
int[] numbers = { 2, 3, 4, 5 };
var squaredNumbers = numbers.Select(x => x * x);
Console.WriteLine(string.Join(" ", squaredNumbers));
Do'stlaringiz bilan baham: |