Giới thiệu
Phương thức Aggregate() trong LINQ cho phép thực hiện các phép tính tích lũy (accumulation) trên một chuỗi giá trị. Nó áp dụng một hàm tích lũy lên các phần tử để tính toán một kết quả đơn lẻ như tổng, tích, min, max, trung bình, v.v.
Ví dụ: Tính tích các phần tử
Mảng đầu vào:
int[] arr = { 10, 15, 20 };
Sử dụng Aggregate() để nhân các phần tử:
arr.Aggregate((x, y) => x * y);
Ví dụ hoàn chỉnh
using System;
using System.Linq;
public class Demo
{
public static void Main()
{
int[] arr = { 10, 15, 20 };
// Tính tích: 10 * 15 * 20 = 3000
int res = arr.Aggregate((x, y) => x * y);
Console.WriteLine(res);
}
}
Kết quả
3000
Các nạp chồng khác
Aggregate() có các nạp chồng hỗ trợ:
Aggregate(Func<T, T, T>)- như ví dụ trên.Aggregate(TAccumulate, Func<TAccumulate, T, TAccumulate>)- cho phép giá trị khởi tạo (seed).Aggregate(TAccumulate, Func<TAccumulate, T, TAccumulate>, Func<TAccumulate, TResult>)- có thêm hàm chọn kết quả cuối.
Ví dụ với seed (giá trị khởi tạo)
// Tính tổng với giá trị khởi tạo = 100 int sum = arr.Aggregate(100, (acc, x) => acc + x); // 100 + 10 + 15 + 20 = 145
Lưu ý
- Với mảng rỗng, nạp chồng không có seed sẽ ném
InvalidOperationException. - Hiệu suất tốt cho các phép tính đơn giản, nhưng với các phép phức tạp có thể cân nhắc dùng vòng lặp
foreach.