首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C# LINQ Aggregate 種子值與累加器 Lambda 解析

     編輯:程式設計綜合問答

代碼

arr.Aggregate(1, (a, b) => a * b)

執行流程

  1. 種子值:1 作為初始累加結果 a。
  2. 迭代:依次取數組元素作為 b,執行 Lambda (a, b) => a * b,返回值作為**下一次迭代的 a**。
  3. 等價循環:
    int acc = 1; // 種子
    foreach (var b in arr) {
        acc = acc * b; // a 來自上一次結果
    }
    return acc;

關鍵點

  • a **不是**來自「上一個表達式」,而是**上一次 Lambda 調用的返回值**(累加器狀態)。
  • LINQ 內部維護累加器變量,開發者只需定義「如何合併當前累加值與下一元素」。
  • 若無種子值重載 arr.Aggregate((a, b) => a * b),則以第一個元素為初始 a,從第二個元素開始迭代。

示例

arr = [2, 3, 4],種子 1:

步驟 1: a=1, b=2 → 1*2=2 (新 a)
步驟 2: a=2, b=3 → 2*3=6 (新 a)
步驟 3: a=6, b=4 → 6*4=24 (最終結果)
結果 = 24 = 1*2*3*4

Aggregate 即函數式編程中的 **fold/reduce**,種子值決定初始狀態,Lambda 定義狀態轉移。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved