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