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()方法有两种重载方法。一种方法接受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

在上面的示例中,由于前两个元素的长度小于3,所以 SkipWhile() 跳过前两个元素,并找到长度等于或大于4的第三个元素。一旦找到长度等于或大于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

在上面的示例中,lambda表达式包括元素和元素的索引作为参数。它会跳过所有元素,直到字符串元素的长度大于其索引。

查询语法中的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