c#数组的累加器Aggregate

今天做题,看题解有个大佬写了一个有意思的语句。其中用到了Aggregate,查了查百度也没学多少东西,鄙人又太笨,看了看官方文档也没看懂。就自己研究了一下,于此记录,以备复习之需。

先放一下原型(以int为例)c#数组的累加器Aggregate
于是写一个程序来测试一下,观察结果

using System;
using System.Linq;

namespace Test
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] myIntArray = { 1, 2, 3, 4, 5 };
            int[] myIntArray2 = { 1, 2 };
            int[] myIntArray3 = { 2, 1};
            Console.WriteLine(myIntArray.Aggregate((paramA, paramB) => paramA + paramB));
            Console.WriteLine(myIntArray.Aggregate((paramA, paramB) => paramA * 2 + paramB));
            Console.WriteLine(myIntArray2.Aggregate((paramA, paramB) => paramA * 2 + paramB));
            Console.WriteLine(myIntArray2.Aggregate((paramA, paramB) => 4 + paramB))
			Console.WriteLine(myIntArray4.Aggregate((paramA, paramB) => 4 + paramB));
            Console.WriteLine(myIntArray3.Aggregate((paramA, paramB) => 4 + paramB));
            Console.ReadKey();
        }
    }
}

然后结果依次是:

15
57
4
6
7
5

可以从第一个输出得知,本例中累加器的作用确实是将元素依次相加(注:这里是因为我写的方法是相加,具体还可以是什么还要看自己怎么写,它只是将每个元素进行相同方法的操作)
我们可以大致进行两种假设:

  1. 对于这个匿名方法,paramA的值第一次是数组的第一个参数,之后每轮相加的结果保存在paramA,然后读取下一个数组元素保存在paramB.
  2. 对于这个匿名方法,paramA初始值为0(在int情况下,其他情况类推),随后数组的每个元素依次给paramB,执行这个匿名方法。

结合第四个和第五个输出可知,假设2并不正确
然后输出4和6进一步验证了假设1的可能性
依照假设1的思路计算输出2,计算结果与输出一致,过程如下:

(((1*2+2)*2+3)*2+4)*2+5=57

所以可以得出结论,Aggregate累加器接收到的第一个元素作为paramA,以后接收的元素都存在paramB与paramA进行运算,并且运算结果存在paramA中后与新的paramB进行下一轮计算。

上一篇:mongodb 聚合查询


下一篇:图神经网络-图采样学习笔记