LINQ 分区运算符 Take & TakeWhile

分区运算符将序列(集合)分为两部分,并返回其中一部分。

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>通过元素索引的谓词类型。

在下面的示例中,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