c#数组的累加器Aggregate

本文解析了C#中Aggregate方法的匿名函数作用机制,通过实例演示如何使用累加器实现数组元素的加法和乘法运算,并揭示了累加器参数的动态变化。关键在于理解paramA和paramB的角色,以及它们在运算过程中的更新方式。
摘要由CSDN通过智能技术生成

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

先放一下原型(以int为例)vs中对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进行下一轮计算。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值