LINQ でのパーティション分割とは、要素を並べ替えずに入力シーケンスを 2 つのセクションに分割し、セクションの 1 つを返す操作を指します。
Von Bedeutung
これらのサンプルでは、System.Collections.Generic.IEnumerable<T> データ ソースを使用します。
System.Linq.IQueryProvider に基づくデータ ソースでは、System.Linq.IQueryable<T> データ ソースと式ツリーが使用されます。 式ツリーには、許可される C# 構文に制限があります。 さらに、IQueryProvider
などの各 データ ソースでは、より多くの制限が課される場合があります。 ご利用のデータ ソースのドキュメントをご覧ください。
次の図は、一連の文字に対する 3 つの異なるパーティション分割操作の結果を示しています。 最初の操作は、シーケンス内の最初の 3 つの要素を返します。 2 番目の操作では、最初の 3 つの要素をスキップし、残りの要素を返します。 3 番目の操作では、シーケンス内の最初の 2 つの要素をスキップし、次の 3 つの要素を返します。
次のセクションでは、パーティション シーケンスの標準クエリ演算子メソッドを示します。
オペレーター
メソッド名 | 説明 | C# クエリ式の構文 | 詳細情報 |
---|---|---|---|
スキップ | シーケンス内の指定した位置まで要素をスキップします。 | 適用されません。 | Enumerable.Skip Queryable.Skip |
SkipWhile | 要素が条件を満たさないまで、述語関数に基づいて要素をスキップします。 | 適用されません。 | Enumerable.SkipWhile Queryable.SkipWhile |
取る | シーケンス内の指定した位置まで要素を受け取ります。 | 適用されません。 | Enumerable.Take Queryable.Take |
テイクホワイル | 要素が条件を満たさないまで、述語関数に基づいて要素を受け取ります。 | 適用されません。 | 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
TakeWhile
メソッドとSkipWhile
メソッドは、シーケンス内の要素を受け取ってスキップします。 ただし、これらのメソッドは、設定された数の要素ではなく、条件に基づいて要素をスキップまたは取得します。
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
SkipWhile
は、条件が true である限り、最初の要素をスキップします。 条件に一致しない最初の要素と後続のすべての要素が返されます。
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# コードでは、次のことが行われます。
- Enumerable.Range(Int32, Int32)に依存して一連の数値を生成します。
-
Chunk
演算子を適用し、最大サイズが 3 のチャンクにシーケンスを分割します。
こちらも参照ください
.NET