English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

LINQパーティション演算子Take & TakeWhile

パーティション演算子はシーケンス(コレクション)を2つの部分に分け、そのうちの1部分を返します。

Take

Take()拡張メソッドは、最初の要素から指定された数の要素を返します。

IList<string> strList = new List<string>(){ "One", "Two", "Three", "Four", "Five" };
var newList = strList.Take(2);
foreach(var str in newList)
    Console.WriteLine(str);
出力:
One
Two

C#クエリ文法はTake & takedwhile演算子をサポートしていません。しかし、クエリ変数にTakeを使用できます。/takedwhile メソッド、またはクエリ全体を括弧に包み込んでからTakeを呼び出す/takedwhile ()。

Dim takeResult = From s In studentList
                 Take 3
                 Select s

TakeWhile

TakeWhile()拡張メソッドは、指定された条件がtrueになるまで与えられたコレクションの要素を返します。最初の要素自体が条件を満たさない場合、空のコレクションを返します。

TakeWhileメソッドには、Func<TSource, bool>型のポリシーフンションを受け入れる方法と、Func<TSource, int, bool>型のインデックスを渡すポリシーフンションを受け入れる重载メソッドの2種類があります。

以下の例では、TakeWhile()メソッドは、文字列の長さが指定された文字数を超えるまでのすべての要素を含む新しいコレクションを返します。4文字の文字列までを返します。

例:C#でのTakeWhileメソッドは、文字列の長さが指定された文字数を超えるまでの文字列を返します4の要素

IList<string> strList = new List<string>() { 
                                            "Three", 
                                            "Four", 
                                            "Five", 
                                            "Hundred"};
var result = strList.TakeWhile(s => s.Length > 4);
foreach(string str in result)
        Console.WriteLine(str);
出力:
Three

上記の例では、TakeWhile()は第二の文字列要素が条件を満たさないため、最初の要素のみを含む新しいコレクションを返します。

TakeWhileはまた、現在の要素のインデックスを引数にするポリシーフンションを渡します。以下のTakeWhileメソッドの例では、文字列要素の長さがそのインデックスを超えるまで受け入れます

例:C#でのTakeWhileはインデックスを渡し、文字列の長さがインデックスを超える要素を返します
IList<string> strList = new List<string>() { 
                                            "One", 
                                            "Two", 
                                            "Three", 
                                            "Four", 
                                            "Five", 
                                            "Six"};
var resultList = strList.TakeWhile((s, i) => s.Length > i);
foreach(string str in resultList)
        Console.WriteLine(str);
出力:
One
Two
Three
Four