更久没更了,心思又回归到代码学习中了。
很多时候,我们需要对一些容器中的数据进行筛选,通常的做法可能用for/foreach循环来判断,但.net3.5就开始支持LINQ语言,这样使得我们敲代码更加优雅,提升效率,让代码显得更有"质感"。小编我个人认为,代码需要探索精神,突破自己的固有壁垒才逐步提升自己的代码水平,可惜小编对上班不是很感兴趣,志不于此。人走向成功的第一步首先是敢想,梦都不敢做,谈何实现,此话谨献于志在想创立中国500强级公司的有为青年,当然需要脚踏实地,一步一个脚印。好像扯多了,此篇会不断更新补充知识点。。。
1.Skip和Take
Skip(n)主要用于跳跃前n个元素,反过来Take(n)就是取前n个元素。
2.SkipWhile和TakeWhile
SkipWhile情形一:SkipWhile就是跳过满足条件(这里n>=5)的元素开始读取
static void Main(string[] args)
{
int[] lst = new int[] { 5, 4, 8, 6, 3, 40, 20 };
List<int> newArr = lst.SkipWhile(n => n >=5).ToList();
foreach (var item in newArr)
{
Console.WriteLine("{0}", item);
}
Console.Read();
}
输出:4,8,6,3,40,20
SkipWhile情形二:两个参数,n代表元素值,i代表index值
static void Main(string[] args)
{
int[] lst = new int[] { 5, 4, 8, 6, 3, 40, 20 };
List<int> newArr = lst.SkipWhile((n, i) => n >= 5 && i > 2).ToList();//注意&&和||,SkipWhile用||达到需求
foreach (var item in newArr)
{
Console.WriteLine("{0}", item);
}
Console.Read();
}
输出:5,4,8,6,3,40,20
static void Main(string[] args)
{
int[] lst = new int[] { 5, 4, 8, 6, 3, 40, 20 };
List<int> newArr = lst.SkipWhile((n, i) => n >= 5 || i >2).ToList();//注意&&和||,SkipWhile用||达到需求
foreach (var item in newArr)
{
Console.WriteLine("{0}", item);
}
Console.Read();
}
输出:4,8,6,3,40,20
static void Main(string[] args)
{
int[] lst = new int[] { 5, 4, 8, 6, 3, 40, 20 };
List<int> newArr = lst.SkipWhile((n, i) => n >= 5 && i < 2).ToList();//注意&&和||,SkipWhile用||达到需求
foreach (var item in newArr)
{
Console.WriteLine("{0}", item);
}
Console.Read();
}
输出:4,8,6,3,40,20
static void Main(string[] args)
{
int[] lst = new int[] { 5, 4, 8, 6, 3, 40, 20 };
List<int> newArr = lst.SkipWhile((n, i) => n >= 5 || i <2).ToList();//注意&&和||,SkipWhile用||达到需求
foreach (var item in newArr)
{
Console.WriteLine("{0}", item);
}
Console.Read();
}
输出:3,40,20
看以上四组输出,&&是跳跃的时候同时判断n,i且要满足条件后跳跃,接着读取元素。
TakeWhile情形一:TakeWhile就是读取满足条件(这里n>=5)的元素,不满足中断返回已读。
static void Main(string[] args)
{
int[] lst = new int[] { 5, 4, 8, 6, 3, 40, 20 };
List<int> newArr = lst.TakeWhile((n) => n >= 5).ToList();
foreach (var item in newArr)
{
Console.WriteLine("{0}", item);
}
Console.Read();
}
输出:5
TakeWhile情形二:TakeWhile一样是两个参数,n代表元素值,i代表index。
static void Main(string[] args)
{
int[] lst = new int[] { 5, 4, 8, 6, 3, 40, 20 };
List<int> newArr = lst.TakeWhile((n,i) => n >= 5&&i>2).ToList();//注意&&和||,TakeWhile用&&达到需求
foreach (var item in newArr)
{
Console.WriteLine("{0}", item);
}
Console.Read();
}
输出:无输出
static void Main(string[] args)
{
int[] lst = new int[] { 5, 4, 8, 6, 3, 40, 20 };
List<int> newArr = lst.TakeWhile((n,i) => n >= 5||i>2).ToList();//注意&&和||,TakeWhile用&&达到需求
foreach (var item in newArr)
{
Console.WriteLine("{0}", item);
}
Console.Read();
}
输出:5
就不一一罗列了,意思跟SkipWhile差不多,对于每一个元素同时满足n和i条件才能确定是否结束返回查询值。敬请期待其它LINQ在容器中的语法糖。