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

LINQ 分区演算子 Skip & SkipWhile

分区演算子はシーケンス(集合)を二分割し、その一部を返します。

メソッド説明
Skip

シーケンスの最初の要素から始めて、要素を指定された位置にスキップします。

SkipWhile

条件に一致する要素をスキップし、条件に一致しない要素までスキップします。最初の要素自体が条件に一致しない場合、0個の要素をスキップしてシーケンスのすべての要素を返します。

Take

シーケンスの最初の要素から始めて、要素を指定された位置に移動します。

TakeWhile

最初の要素から要素を返し、条件を満たさないまでです。最初の要素自体が条件を満たさない場合、空のコレクションを返します。

Skip

Skip()メソッドは指定された数の要素をスキップし、残りの要素を返します。

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

クエリ文法でのSkip演算子

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

以下の例では、クエリ文法でのskip演算子を示しています-VB.NET版

Dim skipResult = From s In studentList
                 Skip 3
                 Select s

SkipWhile

名前からも分かるように、LINQのSkipWhile()拡張メソッドは指定された条件がtrueになるまで集合内の要素をスキップします。どの要素の指定条件がfalseになるか一旦見つかると、残りのすべての要素を含む新しいコレクションを返します。

SkipWhile()メソッドには2種類のオーバーロードメソッドがあります。一つはFunc<TSource, bool>タイプのポリモーフィズムを受け取り、もう一つはFunc<TSource, int, bool>を受け取り、要素のインデックスを通じてポリモーフィズムを受け取ります。

以下の例では、SkipWhile()メソッドはすべての要素をスキップし、長さが等しいか大きい要素を見つけるまでです。4文字の文字列。

例:C#でSkipWhile()メソッドは長さが小さい要素をスキップします4の要素をスキップし、その後のすべての要素を返します。

IList<string> strList = new List<string>() { 
                                            "One", 
                                            "Two", 
                                            "Three", 
                                            "Four", 
                                            "Five", 
                                            "Six"  };
var resultList = strList.SkipWhile(s => s.Length < 4);
foreach(string str in resultList)
        Console.WriteLine(str);
出力:
Three
Four
Five
Six

上の例では、最初の2つの要素の長さが小さいため、3、したがってSkipWhile()は最初の2つの要素をスキップし、長さが等しいか大きい要素を見つけます。4の3番目の要素。一旦長さが等しいか大きい要素を見つけると、4文字の要素、それが小さい場合でも他の要素をスキップしません。4文字。

今、以下の例を見てみましょう。この例では、SkipWhile()はどの要素もスキップしません。なぜなら、最初の要素の指定条件がfalseであるためです。

IList<string> strList = new List<string>() { 
                                            "Three", 
                                            "One", 
                                            "Two", 
                                            "Four", 
                                            "Five", 
                                            "Six"  };
var resultList = strList.SkipWhile(s => s.Length < 4);
foreach(string str in resultList)
        Console.WriteLine(str);
出力:
Three
One
Two
Four
Five
Six

SkipWhileの二番目のオーバーロードは各要素のインデックスを渡します。以下の例を参照してください。

例:C#でインデックスを使用したSkipWhile()メソッド
IList<string> strList = new List<string>() { 
                                            "One", 
                                            "Two", 
                                            "Three", 
                                            "Four", 
                                            "Five", 
                                            "Six"  };
var result = strList.SkipWhile((s, i) => s.Length > i);
foreach(string str in result)
    Console.WriteLine(str);
出力:
Five
Six

上記の例では、ラムダ式には要素とそのインデックスが引数として含まれています。それは、文字列要素の長さがそのインデックスよりも大きくなるまでのすべての要素をスキップします。

検索構文の SkipWhile 演算子

C# 検索構文は Skip & SkipWhile 演算子をサポートしていません。しかし、クエリ変数に対して Skip を使用できます。/SkipWhile メソッド、または全体のクエリを括弧で囲んでから Skip を呼び出します。/SkipWhile ()。

例:VB.NetでのSkipWhileメソッド
Dim strList = New List(Of string) From {
                                        "One", 
                                        "Two", 
                                        "Three", 
                                        "Four", 
                                        "Five", 
                                        "Six"  }
Dim skipWhileResult = From s In studentList
                      Skip While s.Length < 4
                      Select s
出力:
Three
Four
Five
Six