首先解释一下Skip和Take都用来干嘛的。
1.Skip跳过指定数量的项,并获取剩余的项
2.Take提取制定数量的项
3.TakeWhile根据指定条件提出数据
4.SkipWhile根据指定条件跳过数据
实例如下:
/// <summary>
/// Take用法
/// </summary>
public void Linq1()
{
int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };
var first3Numbers = numbers.Take(3); //从第一个元素开始,获取三个
Console.WriteLine("First 3 numbers:");
foreach (var n in first3Numbers)
{
Console.WriteLine(n);
}
}
结果
5
4
1
/// <summary>
/// TakeWhile用法
/// </summary>
public void Linq2()
{
int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };
//在这里需要注意.使用TakeWhile获取小于6的元素,是从第一个元素开始,
//一直到不满足其小于6这个条件为止.也就是执行到和9这个元素比较后,就结束比较了
//可以想象一下执行过程.
//5<6=true;4<6=true;1<6=true;3<6=true
//9<6=false; 这里就停止继续比较了
var firstNumbersLessThan6 = numbers.TakeWhile(n => n < 6);
Console.WriteLine("First numbers less than 6:");
foreach (var n in firstNumbersLessThan6)
{
Console.WriteLine(n);
}
}
结果
5
4
1
3
/// <summary>
/// Skip用法
/// </summary>
public void Linq3()
{
int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };
var allButFirst4Numbers = numbers.Skip(4); //跳过前四个元素,获取后面所有的元素
Console.WriteLine("All but first 4 numbers:");
foreach (var n in allButFirst4Numbers)
{
Console.WriteLine(n);
}
}
结果
9
8
6
7
2
0
/// <summary>
/// SkipWhile用法
/// </summary>
public void Linq4()
{
int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };
//这里和TakeWhiel又有些不一样。
var allButFirst3Numbers = numbers.SkipWhile(n => n < 6);
Console.WriteLine("结果:");
foreach (var n in allButFirst3Numbers)
{
Console.WriteLine(n);
}
}
结果
9
8
6
7
2
0