Sdílet prostřednictvím


Dělení dat (C#)

Rozdělení na části v LINQ odkazuje na operaci rozdělení vstupní posloupnosti do dvou částí, aniž by se přeuspořádaly prvky, a následné vrácení jedné části.

Důležité

Tyto ukázky používají zdroj dat System.Collections.Generic.IEnumerable<T>. Zdroje dat, které jsou založené na System.Linq.IQueryProvider, používají zdroje dat System.Linq.IQueryable<T> a stromy výrazů . Stromy výrazů mají omezení povolené syntaxe jazyka C#. Každý zdroj dat IQueryProvider, například EF Core, může navíc uplatňovat další omezení. Projděte si dokumentaci ke zdroji dat.

Následující obrázek ukazuje výsledky tří různých operací částění na sekvenci 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.

Obrázek znázorňující tři operace dělení LINQ

Metody operátorů standardního dotazu, které rozdělují sekvence, jsou uvedeny v následující části.

Operátoři

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. Nelze použít. Enumerable.Skip
Queryable.Skip
Přeskočit dokud Přeskočí prvky založené na predikátové funkci, dokud prvek nesplňuje podmínku. Nelze použít. Enumerable.SkipWhile
Queryable.SkipWhile
Vezměte Přebírá prvky až do zadané pozice v sekvenci. Nelze použít. Enumerable.Take
Queryable.Take
Chvíli trvat Přebírá prvky založené na predikátové funkci, dokud prvek nesplňuje podmínku. Nelze použít. Enumerable.TakeWhile
Queryable.TakeWhile
Blok dat Rozdělí prvky sekvence na bloky zadané maximální velikosti. Nelze použít. 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 získání prvních prvků v sekvenci pouze:

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

Metody TakeWhile a SkipWhile také vybírají a vynechávají 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) k vytvoření posloupnosti čísel.
  • Chunk Použije operátor, který rozdělí sekvenci na bloky dat s maximální velikostí tří.

Viz také