MySQL Java JavaScript PHP Python HTML-CSS C-sharp

Metoda AsOrdered

În timpul execuției unei interogări paralele, ordinea datelor în setul de rezultate poate fi imprevizibilă. De exemplu:

int[] numbers = new int[] { -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, };
var squares = from n in numbers.AsParallel()
                where n > 0
                select Square(n);

foreach (var n in squares)
   Console.WriteLine(n);

int Square(int n) => n * n;

În acest caz, programul calculează pătratele numerelor care sunt mai mari de 0. Totuși, rezultatul programului poate fi neordonat:

1
16
49
4
25
64
9
36

Adică datele sunt unite într-un set comun fără a fi ordonate.

Dacă în interogare se aplică operatori sau metode de sortare, datele sunt ordonate automat:

var squares = from n in numbers.AsParallel()
                where n > 0
                orderby n  // sortare
                select Square(n);

Totuși, operatorul orderby sau metoda OrderBy nu sunt întotdeauna folosite în interogări. Mai mult, acestea ordonează setul de rezultate conform rezultatelor și nu conform secvenței inițiale. În aceste cazuri, putem aplica metoda AsOrdered():

var squares = from n in numbers.AsParallel().AsOrdered()
             where n > 0
             select Square(n);

În acest caz, rezultatul va fi ordonat conform modului în care elementele sunt dispuse în secvența inițială:

1
4
9
16
25
36
49
64

Totuși, trebuie să înțelegem că ordonarea în cadrul unei operațiuni paralele crește costurile, astfel încât o astfel de interogare va fi executată mai încet decât una neordonată. Dacă sarcina nu necesită returnarea unui set ordonat, este mai bine să nu se aplice metoda AsOrdered.

În plus, dacă în program urmează să se efectueze anumite manipulări cu setul de date obținut, dar ordonarea nu mai este necesară, putem aplica metoda AsUnordered():

int[] numbers = new int[] { -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, };
var squares = from n in numbers.AsParallel().AsOrdered()
             where n > 0
             select Square(n);

// selectăm numerele mai mari de 4 fără a ordona rezultatul
var query = from n in squares.AsUnordered()
           where n > 4
           select n;

foreach (var n in query)
   Console.WriteLine(n);

int Square(int n) => n * n;
← Lecția anterioară Lecția următoare →