输出结果:
城市:北京,平均分:70.5,最高分:94,平均年龄:16 城市:广州,平均分:77,最高分:77,平均年龄:19 城市:上海,平均分:14,最高分:14,平均年龄:14 6. IEnuemrable<T>.Join() 7. IEnuemrable<T>.GroupJoin() 8. IEnuemrable<T>.Skip()IEnumerable<T>.Skip(int N) 方法的主要作用就是从序列首部跳过序列中 N 个元素,然后返回其结果,这个方法还有两个衍生的方法。
第一个是 IEnumerable<T>.SkipLast(int N) 方法,与 Skip(int N) 方法相反,它会从序列的尾部跳过 N 个元素再返回结果。
第二个则是 IEnumerbale<T>.SkipWhile(Func<T,bool> predicate) ,它可以传入一个过滤条件,当序列当中遇到第一个不满足条件的元素时,就会返回该元素及其后续的所有元素,而略过之前符合条件的元素。
标准用法:
class Program { static void Main() { void OutputResult(IEnumerable<int> ienumerable) { foreach (var item in ienumerable) { Console.WriteLine($"{item}"); } } var integers = new List<int> {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; // Skip() 方法演示。 Console.WriteLine("Skip() 方法演示:"); var skipResult = integers.Skip(5); OutputResult(skipResult); // SkipLast() 方法演示。 Console.WriteLine("SkipLast() 方法演示:"); var skipLastResult = integers.SkipLast(5); OutputResult(skipLastResult); // SkipWhile() 方法演示。 Console.WriteLine("SkipWhile() 方法演示:"); var skipWhileResult = integers.SkipWhile(@int => @int != 3); OutputResult(skipWhileResult); } }输出结果:
Skip() 方法演示: 6 7 8 9 10 SkipLast() 方法演示: 1 2 3 4 5 SkipWhile() 方法演示: 3 4 5 6 7 8 9 10 9. IEnuemrable<T>.Take()IEnumerable<T>.Take(int N) 方法的作用是从序列首部选取 N 个元素返回结果。
它也拥有两个衍生的方法,第一个是 IEnumerable<T>.TakeLast(int N) 方法,与 Skip(int N) 方法相同。这个方法主要是从序列的尾部选取 N 个元素组成一个新的序列并返回其结果。
第二个方法也是相似,叫做 IEnumerable<T>.TakeWhile(Func<T,bool>) ,与 IEnumerable<T>.Skip(Func<T,bool>) 方法相反,本方法是会从序列首部开始获取元素,直到条件满足时就会停止获取,然后将这些结果返回成为一个新的序列。
标准用法:
class Program { static void Main() { void OutputResult(IEnumerable<int> ienumerable) { foreach (var item in ienumerable) { Console.WriteLine($"{item}"); } } var integers = new List<int> {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; // Take() 方法演示。 Console.WriteLine("Take() 方法演示:"); var skipResult = integers.Take(5); OutputResult(skipResult); // TakeLast() 方法演示。 Console.WriteLine("TakeLast() 方法演示:"); var skipLastResult = integers.Take(3); OutputResult(skipLastResult); // TakeWhile() 方法演示。 Console.WriteLine("TakeWhile() 方法演示:"); var skipWhileResult = integers.TakeWhile(@int => @int != 3); OutputResult(skipWhileResult); } }输出结果:
Take() 方法演示: 1 2 3 4 5 TakeLast() 方法演示: 1 2 3 TakeWhile() 方法演示: 1 2 10. IEnuemrable<T>.Aggregate()IEnumerable<T>.Aggregate() 方法的主要作用是帮助开发人员对一个序列的资料进行汇总处理,即会执行 N 次,每次会将之前的汇总结果与当前元素的值传入到一个 Func<TSource, TSource, TSource> 委托当中,其返回值就会作为新的汇总结果传递给下一个元素。
IEnumerable<T>.Aggregate() 共有 3 个重载方法,其运行机制与上述说明一致,只是在于初始化操作和返回值的时候不太一致。
public static TSource Aggregate<TSource>( this IEnumerable<TSource> source, Func<TSource, TSource, TSource> func);其中 func 参数是每次执行汇总操作时的逻辑方法,第一个参数则是之前的汇总结果,第二个参数即是当前元素的值,最后一个返回值则是汇总完成的结果,将会作为下一次汇总操作时的传入参数。(即第一个参数的值)
public static TAccumulate Aggregate<TSource, TAccumulate>( this IEnumerable<TSource> source, TAccumulate seed, Func<TAccumulate, TSource, TAccumulate> func);其中 seed 是汇总结果的初始值,这个值将会在第一次计算汇总结果的时候用到。
public static TResult Aggregate<TSource, TAccumulate, TResult>( this IEnumerable<TSource> source, TAccumulate seed, Func<TAccumulate, TSource, TAccumulate> func, Func<TAccumulate, TResult> resultSelector);本方法与上一个方法类似,不同的是有一个 resultSelector 委托可以方便我们将数据重新投射到不同的类型当中去。