Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C#

คูณเลขทุกตัวใน List C# - หาผลคูณ (Product)

การหาผลคูณของสมาชิกทั้งหมดใน List ทำได้ง่ายด้วย Loop หรือ LINQ Aggregate

วิธีที่ 1: foreach Loop (เข้าใจง่าย เร็วที่สุด)

using System;
using System.Collections.Generic;

public class Program
{
    public static void Main()
    {
        var myList = new List { 5, 10, 7 };

        int product = 1;
        foreach (int n in myList)
        {
            product *= n;
        }

        Console.WriteLine($"Product: {product}"); // 350
    }
}

วิธีที่ 2: LINQ Aggregate (Functional Style)

using System.Linq;

var product = myList.Aggregate(1, (acc, n) => acc * n);
// หรือ
var product = myList.Aggregate((acc, n) => acc * n); // ใช้ตัวแรกเป็น seed

วิธีที่ 3: สำหรับ double/decimal (หลีกเลี่ยง Overflow)

var numbers = new List { 1.5, 2.0, 3.5 };
double product = numbers.Aggregate(1.0, (acc, n) => acc * n);

จัดการ Empty List

public static int Product(List list)
{
    if (list == null || list.Count == 0)
        return 0; // หรือ throw / return 1 ตาม Business Logic

    return list.Aggregate(1, (acc, n) => acc * n);
}

⚠️ Integer Overflow

int.MaxValue = 2,147,483,647 หากผลคูณเกินจะเกิด Overflow (Wrap around)

// ใช้ checked เพื่อ Throw Exception
checked
{
    int product = list.Aggregate(1, (acc, n) => acc * n);
}

// หรือใช้ long/BigInteger
long product = list.Aggregate(1L, (acc, n) => acc * n);
BigInteger product = list.Aggregate(BigInteger.One, (acc, n) => acc * n);

Parallel Version (สำหรับ List ใหญ่มาก)

using System.Threading.Tasks;

var product = list.AsParallel().Aggregate(
    () => 1,           // Seed factory
    (acc, n) => acc * n, // Local aggregation
    (acc1, acc2) => acc1 * acc2, // Combine
    acc => acc);       // Final selector

กรณีใช้งานจริง

  • คำนวณ Probability (คูณความน่าจะเป็นอิสระ)
  • Financial: Compound Interest, Returns
  • Statistics: Geometric Mean (nth root of product)
  • Combinatorics: Permutations, Combinations

Benchmark สรุป

วิธีSpeedReadabilityOverflow Safety
foreach Loop⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐Manual
LINQ Aggregate⭐⭐⭐⭐⭐⭐⭐⭐Manual
Parallel Aggregate⭐⭐⭐ (Large N)⭐⭐Manual