分割資料 (C#)

LINQ 中的分割是指將輸入序列分成兩個區段的作業,不用重新排列項目,然後傳回其中一個區段。

下圖顯示字元序列三種不同分割作業的結果。 第一項作業會傳回序列中的前三個項目。 第二項作業會略過前三個項目,傳回其餘項目。 第三個作業會略過序列中的前兩個項目,傳回接下來的三個元項目。

Illustration that shows three LINQ partitioning operations.

分割序列的標準查詢運算子方法詳列於下一節。

操作員

方法名稱 描述 C# 查詢運算式語法 其他相關資訊
跳過 略過項目直至序列中指定的位置為止。 不適用。 Enumerable.Skip
Queryable.Skip
SkipWhile 根據述詞函式跳過項目,直到不符合條件的項目為止。 不適用。 Enumerable.SkipWhile
Queryable.SkipWhile
Take 採用序列中最多到指定位置為止的項目。 不適用。 Enumerable.Take
Queryable.Take
TakeWhile 根據述詞函式採用項目,直到不符合條件的項目為止。 不適用。 Enumerable.TakeWhile
Queryable.TakeWhile
區塊 將序列的元素分割為指定大小上限的區塊。 不適用。 Enumerable.Chunk
Queryable.Chunk

下列所有範例都會使用 Enumerable.Range(Int32, Int32) 來產生從 0 到 7 的數值序列。

您可以使用 Take 方法,只接受序列中的第一個元素:

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

您可以使用 Skip 方法來跳過序列中的第一個元素,並使用其餘元素:

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

TakeWhileSkipWhile 方法也會採用和跳過序列中的元素。 不過,這些方法不是根據設定的元素數量,而是根據條件跳過或採用元素。 TakeWhile 會採用序列中的元素,直到有元素不符合條件為止。

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

只要條件為 true,SkipWhile 就會跳過第一個元素。 不符合條件的第一個元素和所有後續元素皆會傳回。

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

Chunk 運算子可依據指定 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

在上述 C# 程式碼中:

另請參閱