Chunk în C# (.NET)

Împarte o secvență în tablouri de câte n elemente; ultimul grup poate fi mai mic. Util pentru loturi și afișare pe rânduri.

Sintaxă C#
foreach (T[] grup in sursa.Chunk(marime)) { ... }

Ce face Chunk

Chunk(marime) întoarce o secvență de tablouri T[], fiecare cu cel mult marime elemente, în ordinea originală. Ultimul tablou conține ce a rămas. E util pentru trimiterea datelor în loturi (inserări în baza de date, cereri către un API cu limită), pentru paginare în memorie sau pentru afișarea pe coloane.

Dimensiunea trebuie să fie cel puțin 1, altfel metoda aruncă ArgumentOutOfRangeException. Ca toate metodele LINQ care întorc secvențe, este evaluată la parcurgere.

Parametri

Parametru Descriere
size Numărul maxim de elemente dintr-un grup (minim 1).

Ce returnează

IEnumerable<T[]>.

Exemple

Exemplul 1: Elevi împărțiți în grupe

var elevi = Enumerable.Range(1, 7).Select(i => $"E{i}");

int numar = 1;
foreach (string[] grupa in elevi.Chunk(3))
    Console.WriteLine($"Grupa {numar++}: {string.Join(", ", grupa)}");

Rezultat

Grupa 1: E1, E2, E3
Grupa 2: E4, E5, E6
Grupa 3: E7

Exemplul 2: Loturi pentru import

Fiecare lot este un tablou, așa că are Length și indexare de la coadă cu ^1.

int[] iduri = Enumerable.Range(1, 10).ToArray();

foreach (int[] lot in iduri.Chunk(4))
    Console.WriteLine($"Lot de {lot.Length}: {lot[0]}-{lot[^1]}");

Rezultat

Lot de 4: 1-4
Lot de 4: 5-8
Lot de 2: 9-10

Greșeli frecvente

  • Presupunerea că toate grupurile au aceeași mărime: ultimul poate fi mai mic.
  • Chunk(0) aruncă ArgumentOutOfRangeException.

Comenzi înrudite

  • Skip / Take (paginare): Take ia primele n elemente, Skip le sare; împreună fac paginare. TakeWhile/SkipWhile se opresc la prima condiție falsă.