Dělení dat (C#)

Dělení v LINQ odkazuje na operaci rozdělení vstupní sekvence do dvou oddílů, aniž by se přeuspořádaly prvky a pak vrátily jeden z oddílů.

Následující obrázek znázorňuje výsledky tří různých operací dělení na posloupnost znaků. První operace vrátí první tři prvky v sekvenci. Druhá operace přeskočí první tři prvky a vrátí zbývající prvky. Třetí operace přeskočí první dva prvky v sekvenci a vrátí další tři prvky.

Illustration that shows three LINQ partitioning operations.

Standardní metody operátoru dotazu, které sekvence oddílů jsou uvedeny v následující části.

Operátory

Názvy metod Popis Syntaxe výrazu dotazu jazyka C# Více informací
Přeskočit Přeskočí prvky až na zadanou pozici v sekvenci. Nevztahuje se. Enumerable.Skip
Queryable.Skip
Skipwhile Přeskočí prvky založené na predikátové funkci, dokud prvek nesplňuje podmínku. Nevztahuje se. Enumerable.SkipWhile
Queryable.SkipWhile
Take Přebírá prvky až do zadané pozice v sekvenci. Nevztahuje se. Enumerable.Take
Queryable.Take
Takewhile Přebírá prvky založené na predikátové funkci, dokud prvek nesplňuje podmínku. Nevztahuje se. Enumerable.TakeWhile
Queryable.TakeWhile
Blok dat Rozdělí prvky sekvence na bloky zadané maximální velikosti. Nevztahuje se. Enumerable.Chunk
Queryable.Chunk

Všechny následující příklady slouží Enumerable.Range(Int32, Int32) k vygenerování posloupnosti čísel od 0 do 7.

Metodu Take použijete k pořízení pouze prvních prvků v sekvenci:

foreach (int number in Enumerable.Range(0, 8).Take(3))
{
    Console.WriteLine(number);
}
// This code produces the following output:
// 0
// 1
// 2

Pomocí Skip metody můžete přeskočit první prvky v sekvenci a použít zbývající prvky:

foreach (int number in Enumerable.Range(0, 8).Skip(3))
{
    Console.WriteLine(number);
}
// This code produces the following output:
// 3
// 4
// 5
// 6
// 7

Tyto TakeWhile metody SkipWhile také přebírají a přeskočí prvky v sekvenci. Místo nastaveného počtu prvků však tyto metody přeskočí nebo přebírají prvky na základě podmínky. TakeWhile přebírá prvky sekvence, dokud prvek neodpovídá podmínce.

foreach (int number in Enumerable.Range(0, 8).TakeWhile(n => n < 5))
{
    Console.WriteLine(number);
}
// This code produces the following output:
// 0
// 1
// 2
// 3
// 4

SkipWhile přeskočí první prvky, pokud je podmínka pravdivá. První prvek neodpovídá podmínce a vrátí se všechny následné prvky.

foreach (int number in Enumerable.Range(0, 8).SkipWhile(n => n < 5))
{
    Console.WriteLine(number);
}
// This code produces the following output:
// 5
// 6
// 7

Operátor Chunk se používá k rozdělení prvků sekvence na základě daného size.

int chunkNumber = 1;
foreach (int[] chunk in Enumerable.Range(0, 8).Chunk(3))
{
    Console.WriteLine($"Chunk {chunkNumber++}:");
    foreach (int item in chunk)
    {
        Console.WriteLine($"    {item}");
    }

    Console.WriteLine();
}
// This code produces the following output:
// Chunk 1:
//    0
//    1
//    2
//
//Chunk 2:
//    3
//    4
//    5
//
//Chunk 3:
//    6
//    7

Předchozí kód jazyka C#:

  • Spoléhá na Enumerable.Range(Int32, Int32) vygenerování posloupnosti čísel.
  • Chunk Použije operátor, který rozdělí sekvenci na bloky dat s maximální velikostí tří.

Viz také