MySQL Java JavaScript PHP Python HTML-CSS C-sharp

Operațiuni agregate

Operațiunile agregate includ diverse operațiuni asupra selecțiilor, cum ar fi obținerea numărului de elemente, obținerea valorii minime, maxime și medii în selecție, precum și sumarea valorilor.

Metoda Aggregate

Metoda Aggregate efectuează o agregare generală a elementelor colecției în funcție de expresia specificată. De exemplu:

int[] numbers = { 1, 2, 3, 4, 5 };

int query = numbers.Aggregate((x, y) => x - y);
Console.WriteLine(query);   // -13

Variabila query va reprezenta rezultatul agregării array-ului. Ca și condiție de agregare se folosește expresia (x, y) => x - y, adică inițial se scade al doilea element din primul, apoi al treilea din rezultat și așa mai departe. Astfel, va fi echivalent cu expresia:

int query = 1 - 2 - 3 - 4 - 5;

Rezultatul va fi -13. Putem folosi orice alte operațiuni, de exemplu, adunarea:

int query = numbers.Aggregate((x, y) => x + y); // echivalent cu 1 + 2 + 3 + 4 + 5

O altă versiune a metodei permite specificarea unei valori inițiale de la care începe lanțul operațiunilor de agregare:

string[] words = { "Gaudeamus", "igitur", "Juvenes", "dum", "sumus" };
var sentence = words.Aggregate("Text:", (first, next) => $"{first} {next}");

Console.WriteLine(sentence);  // Text: Gaudeamus igitur Juvenes dum sumus

În acest caz, toate elementele array-ului words sunt combinate, dar primul element al operațiunii de agregare va fi șirul "Text:".

Obținerea dimensiunii selecției - Metoda Count

Pentru a obține numărul de elemente dintr-o selecție se folosește metoda Count():

int[] numbers = { 1, 2, 3, 4, 10, 34, 55, 66, 77, 88 };
int size = numbers.Count();  // 10
Console.WriteLine(size);

Metoda Count() într-una din versiunile sale poate primi și o expresie lambda care stabilește condiția de selecție. Astfel, putem în acest caz să nu folosim expresia Where:

int[] numbers = { 1, 2, 3, 4, 10, 34, 55, 66, 77, 88 };
// numărul de numere pare care sunt mai mari de 10
int size = numbers.Count(i => i % 2 == 0 && i > 10);
Console.WriteLine(size);    // 3

Obținerea sumei

Pentru a obține suma valorilor se folosește metoda Sum:

int[] numbers = { 1, 2, 3, 4, 10, 34, 55, 66, 77, 88 };

int sum = numbers.Sum();
Console.WriteLine(sum);     // 340

Metoda Sum() are mai multe suprascrieri. În special, dacă avem un set de obiecte complexe, cum este exemplul de mai sus, putem specifica proprietatea ale cărei valori vor fi însumate:

Person[] people = { new Person("Tom", 37), new Person("Sam", 28), new Person("Bob", 41) };

int ageSum = people.Sum(p => p.Age);
Console.WriteLine(ageSum);     // 106

record class Person(string Name, int Age);

În acest caz, se calculează suma valorilor proprietății Age a obiectelor Person din array-ul people.

Valoarea maximă, minimă și medie

Pentru a găsi valoarea minimă se folosește metoda Min(), pentru a obține valoarea maximă - metoda Max(), iar pentru a găsi valoarea medie - metoda Average(). Acțiunea lor este similară cu metodele Sum și Count:

int[] numbers = { 1, 2, 3, 4, 10, 34, 55, 66, 77, 88 };

int min = numbers.Min();
int max = numbers.Max();
double average = numbers.Average();

Console.WriteLine($"Min: {min}");           // Min: 1
Console.WriteLine($"Max: {max}");           // Max: 88
Console.WriteLine($"Average: {average}");   // Average: 34

Dacă lucrăm cu obiecte complexe, în aceste metode se transmite un delegat care specifică proprietatea aplicată în calcule:

Person[] people = { new Person("Tom", 37), new Person("Sam", 28), new Person("Bob", 41) };

int minAge = people.Min(p => p.Age); // vârsta minimă
int maxAge = people.Max(p => p.Age); // vârsta maximă
double averageAge = people.Average(p => p.Age); // vârsta medie

Console.WriteLine($"Min Age: {minAge}");           // Min Age: 28
Console.WriteLine($"Max Age: {maxAge}");           // Max Age: 41
Console.WriteLine($"Average Age: {averageAge}");   // Average Age: 35,33

record class Person(string Name, int Age);

În acest caz, pentru calcule se folosește proprietatea Age, adică se calculează vârsta minimă, maximă și medie.

← Lecția anterioară Lecția următoare →