เมธอด Aggregate() ใน System.Linq ใช้สำหรับดำเนินการคำนวณสะสม (accumulation) บนลำดับข้อมูล โดยนำฟังก์ชันที่กำหนดไปประยุกต์ใช้กับองค์ประกอบแต่ละคู่ตามลำดับ เพื่อสร้างค่าผลลัพธ์เดียว สามารถใช้แทนการเขียนลูปสำหรับการคำนวณต่างๆ เช่น ผลรวม ผลคูณ ค่าสูงสุด/ต่ำสุด และอื่นๆ
รูปแบบพื้นฐาน
TResult Aggregate(
IEnumerable source,
Func func
)
ตัวอย่าง: การคูณค่าทั้งหมดในอาร์เรย์
int[] arr = { 10, 15, 20 };
int product = arr.Aggregate((x, y) => x * y); // 10 * 15 * 20 = 3000
โค้ดตัวอย่างสมบูรณ์
using System;
using System.Linq;
public class Demo
{
public static void Main()
{
int[] arr = { 10, 15, 20 };
// การคูณสะสม
int product = arr.Aggregate((x, y) => x * y);
Console.WriteLine($"ผลคูณ: {product}"); // 3000
// ตัวอย่างเพิ่มเติม: การหาค่าสูงสุด
int max = arr.Aggregate((x, y) => x > y ? x : y);
Console.WriteLine($"ค่าสูงสุด: {max}"); // 20
// ตัวอย่าง: การสร้างสตริงจากอาร์เรย์
string[] words = { "Hello", "World", "C#" };
string combined = words.Aggregate((x, y) => x + " " + y);
Console.WriteLine($"รวมข้อความ: {combined}"); // "Hello World C#"
}
}
ผลลัพธ์
ผลคูณ: 3000
ค่าสูงสุด: 20
รวมข้อความ: Hello World C#
รูปแบบขั้นสูง: ระบุค่าเริ่มต้น (Seed)
// เริ่มต้นจากค่า 100 แล้วคูณต่อ
int result = arr.Aggregate(100, (x, y) => x * y); // 100 * 10 * 15 * 20 = 300000
หมายเหตุ
- เหมาะสำหรับการคำนวณที่ต้องใช้ค่าก่อนหน้าในการคำนวณค่าถัดไป
- สำหรับการคำนวณพื้นฐาน (Sum, Min, Max, Average) ควรใช้เมธอดเฉพาะทางเพื่อประสิทธิภาพและความอ่านง่ายกว่า
- ต้องระวัง
OverflowExceptionสำหรับชนิดข้อมูลที่มีขอบเขตจำกัด