返回LINQ大全首页
- Take()
- TakeWhile()和Where()的区别
Take()
可以获取序列的指定部分。具体使用请看下面案例。
MSDN public static IEnumerable Take( this IEnumerable source, int count );
代码示例:
public static class Program
{
static void Main( string[] args )
{
int[] numbers = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
string[] texts = new string[] { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" };
// 开始的3个
IEnumerable takenNumbers = numbers.Take( 3 );
// 开始的4个
IEnumerable takenTexts = texts.Take( 4 );
System.Console.WriteLine( "takenNumbers:{0}", takenNumbers.Text() );
System.Console.WriteLine( "takenTexts :{0}", takenTexts.Text() );
System.Console.ReadKey();
}
public static string Text( this IEnumerable i_source )
{
string text = string.Empty;
foreach( var value in i_source )
{
text += string.Format( "[{0}], ", value );
}
return text;
}
}
takenNumbers:[0], [1], [2],
takenTexts :[Sun], [Mon], [Tue], [Wed],
如果将大于元素总数的数字或负数传递给此参数,它也会正常工作。负数的话相当于0。
代码示例:
public static class Program
{
static void Main( string[] args )
{
int[] numbers = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
string[] texts = new string[] { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" };
// 超过总数
IEnumerable takenNumbers = numbers.Take( 100 );
// 负数
IEnumerable takenTexts = texts.Take( -5 );
System.Console.WriteLine( "takenNumbers:{0}", takenNumbers.Text() );
System.Console.WriteLine( "takenTexts :{0}", takenTexts.Text() );
System.Console.ReadKey();
}
public static string Text( this IEnumerable i_source )
{
string text = string.Empty;
foreach( var value in i_source )
{
text += string.Format( "[{0}], ", value );
}
return text;
}
}
takenNumbers:[0], [1], [2], [3], [4], [5], [6], [7], [8], [9],
takenTexts :
在前一种形式中,Take()
所需元素的数量是从头开始指定的。 但是,您的需求可能是指定条件而不是数字。
在这种情况下TakeWhile()
。 您可以在参数中描述条件。
MSDN public static IEnumerable TakeWhile( this IEnumerable source, Func predicate );
代码示例:
public static class Program
{
static void Main( string[] args )
{
int[] numbers = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
string[] texts = new string[] { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" };
// 小于4的值
IEnumerable takenNumbers = numbers.TakeWhile( value => value value.EndsWith( "n" ) );
System.Console.WriteLine( "takenNumbers:{0}", takenNumbers.Text() );
System.Console.WriteLine( "takenTexts :{0}", takenTexts.Text() );
System.Console.ReadKey();
}
public static string Text( this IEnumerable i_source )
{
string text = string.Empty;
foreach( var value in i_source )
{
text += string.Format( "[{0}], ", value );
}
return text;
}
}
takenNumbers:[0], [1], [2], [3],
takenTexts :[Sun], [Mon],
当TakeWhile()
指定条件时,不仅可以获得每个元素的信息,而且可以获得每个元素的索引。 MSDN public static IEnumerable TakeWhile( this IEnumerable source, Func predicate );
在以下示例中,index
索引号作为参数在lambda表达式条件语句中传递。
代码示例:
public static class Program
{
static void Main( string[] args )
{
int[] numbers = new int[] { 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 };
string[] texts = new string[] { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" };
// 值小于索引
IEnumerable takenNumbers = numbers.TakeWhile( ( value, index ) => value > index );
// 值的长度大于索引
IEnumerable takenTexts = texts.TakeWhile( ( value, index ) => value.Length > index );
System.Console.WriteLine( "takenNumbers:{0}", takenNumbers.Text() );
System.Console.WriteLine( "takenTexts :{0}", takenTexts.Text() );
System.Console.ReadKey();
}
public static string Text( this IEnumerable i_source )
{
string text = string.Empty;
foreach( var value in i_source )
{
text += string.Format( "[{0}], ", value );
}
return text;
}
}
takenNumbers:[9], [8], [7], [6], [5],
takenTexts :[Sun], [Mon], [Tue],
TakeWhile()和Where()的区别
有一个类似的LINQ函数Where()
。
MSDN public static IEnumerable Where( this IEnumerable source, Func predicate );
Where()用于获取符合条件的元素。 让我们用Where()
与TakeWhile()
进行比较。
以下示例描述了获取元素低于指定数字的条件。
public static class Program
{
static void Main( string[] args )
{
int[] numbers = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
// 值小于5
IEnumerable takenNumbers = numbers.TakeWhile( value => value value value value
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?