ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

c#数组的累加器Aggregate

2021-03-22 22:33:42  阅读:235  来源: 互联网

标签:Console paramB paramA c# 累加器 int WriteLine Aggregate


今天做题,看题解有个大佬写了一个有意思的语句。其中用到了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进行下一轮计算。

标签:Console,paramB,paramA,c#,累加器,int,WriteLine,Aggregate
来源: https://blog.csdn.net/qq_39377889/article/details/115102806

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有