Linq中Take、TakeWhile、Skip、SkipWhile的比较
来源:互联网 发布:图片透视软件 编辑:程序博客网 时间:2024/04/30 18:31
以下代码均来自微软官网
/// <summary>
/// This sample usesTake to get on
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);
}
}
result-----
First 3 numbers:
5
4
1
/// <summary>
/// This sample usesTakeWhile to return elements starting from the beginning
/// of the array until a number is hit that is not less than 6
/// </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);
}
}
result----
First numbers less than 6:
5
4
1
3
/// <summary>
/// This sample usesSkip to get all but the first 4 elements of the array
/// </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);
}
}
result---
All but first 4 numbers:
9
8
6
7
2
0
/// <summary>
/// This sample uses SkipWhile to get the elements of the array starting from the first element divisible by 3.
/// </summary>
public void Linq4()
{
int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };
//跳过不能被3整除的所有元素
//这里和TakeWhiel又有些不一样。
//TakeWhile遇到条件不满足的时候,就会return,
//但是SkipWhile如果执行到能被三整除的数,那么其后面的元素就不会继续比较了
//同样,想象一下执行过程
//5%3!=0==true; 4%3!=0==true; 1%3!=0==true;
//3%3!=0==false; 运行到这里的时候,后面的就不再比较.
//所以输出结果中会有8、7、2、0这几个不满足条件的元素
var allButFirst3Numbers = numbers.SkipWhile(n => n % 3 != 0);
Console.WriteLine("All elements starting from first element divisible by 3:");
foreach (var n in allButFirst3Numbers)
{
Console.WriteLine(n);
}
}
result---
All elements starting from first element divisible by 3:
3
9
8
6
7
2
0
public ElectrostaticCapacityTestResultData LeastSquaresMethod(float voltage, int point, bool isBalanced)
{
var tempData = new List<Tuple<double, double>>();
var normalData = this.Result.Where((item) => isBalanced ? item.CapacitanceDataState == "N" && item.TanDeltaDataState == "N" : true);
//
var item1 = normalData.TakeWhile((item) => item.Voltage <= voltage).ToList();
var item2 = normalData.SkipWhile((item) => item.Voltage <= voltage).ToList();
//
if (item1.Count < point || item2.Count < point)
{
return null;
}
//
item1
.Skip(item1.Count - point)
.ForEach((item) => tempData.Add(new Tuple<double, double>(item.Voltage, item.TanDelta)));
item2
.Take(point)
.ForEach((item) => tempData.Add(new Tuple<double, double>(item.Voltage, item.TanDelta)));
double slope;
double intercept;
Common.Math.CalcSlopeAndIntercept(tempData, out slope, out intercept);
//
if (double.IsNaN(slope) || double.IsNaN(intercept))
{
return null;
}
float tanDelta = ((slope * voltage) + intercept).ToFloat();
tempData.Clear();
//
item1
.Skip(item1.Count - point)
.ForEach((item) => tempData.Add(new Tuple<double, double>(item.Voltage, item.Capacity)));
item2
.Take(point)
.ForEach((item) => tempData.Add(new Tuple<double, double>(item.Voltage, item.Capacity)));
Common.Math.CalcSlopeAndIntercept(tempData, out slope, out intercept);
//
if (double.IsNaN(slope) || double.IsNaN(intercept))
{
return null;
}
float capacity = ((slope * voltage) + intercept).ToFloat();
return new ElectrostaticCapacityTestResultData(voltage, capacity, tanDelta);
}
- Linq中Take、TakeWhile、Skip、SkipWhile的比较
- Linq中Take、TakeWhile、Skip、SkipWhile的比较
- Linq中Take、TakeWhile、Skip、SkipWhile的比较
- linq distinct、union、concat、intersect、except、skip、take、skipwhile、takewhile、
- Linq之Take Skip TakeWhile SkipWhile Reverse Union Concat 用法
- Linq中Skip和Take用法(TakeWhile和SkipWhile用法)
- Take,Skip,TakeWhile,SkipWhile的例子和解释
- Linq中的TakeWhile和SkipWhile的介绍
- 步步为营VS 2008 + .NET 3.5(6) - LINQ查询操作符之Distinct、Union、Concat、Intersect、Except、Skip、Take、SkipWhile、TakeWhile、Single、SingleOrDefaul
- 步步为营VS 2008 + .NET 3.5(6) - LINQ查询操作符之Distinct、Union、Concat、Intersect、Except、Skip、Take、SkipWhile、TakeWhile、Single、SingleOrDefaul
- Linq中的TakeWhile和SkipWhile
- 一个让人很容易犯浑的Linq TakeWhile 和SkipWhile
- 例说Linq中Take与Skip的使用
- LINQ查询操作符之Distinct、Union、Concat、Intersect、Except、Skip、Take、SkipWhile、TakeWhi
- LINQ查询操作符之Distinct、Union、Concat、Intersect、Except、Skip、Take、SkipWhile、TakeWhi
- LINQ Take和Skip
- Linq中的Take和Skip
- Linq中的Take和Skip
- Java中自定义枚举(Enum)项的值及int和Enum的互相转换
- Maganto错误-Cannot initialize the indexer process的解决方法
- 从Android模拟器sdcard中导出文件
- URAL 1057 数位DP(递归)
- warning c4273: inconsistent dll linkage 的解决方法
- Linq中Take、TakeWhile、Skip、SkipWhile的比较
- 编程之美2.21 只考加法的面试题
- C++基础一波流——读《C++编程思想》
- 关于GSL库在vs2005中的移植
- http://bbs.chinaunix.net
- hdu 4352 数位DP
- 如何编译Windows版本的GSL
- chrome开发者工具console
- 虚拟内存,学习随笔