Ringkasan angka seperti jumlah lulusan dan rata-rata kelas menjadi dasar laporan ujian. Operator agregasi menelusuri seluruh elemen dan mengembalikan satu nilai akhir. Semua operator pada bab ini dieksekusi segera saat dipanggil, bukan saat hasilnya diiterasi.
Operator Agregasi Bawaan #
Contoh berikut meringkas satu daftar nilai ujian dari beberapa arah:
int[] nilai = { 85, 60, 90, 45, 75 };
Console.WriteLine($"Lulus: {nilai.Count(n => n >= 70)}");
Console.WriteLine($"Total: {nilai.Sum()}");
Console.WriteLine($"Terendah: {nilai.Min()}");
Console.WriteLine($"Tertinggi: {nilai.Max()}");
Console.WriteLine($"Rata-rata: {nilai.Average()}");
string daftar = nilai.Aggregate("", (baris, n) => baris == "" ? $"{n}" : $"{baris}, {n}");
Console.WriteLine($"Daftar: {daftar}");Output yang Dihasilkan:
Lulus: 3
Total: 355
Terendah: 45
Tertinggi: 90
Rata-rata: 71
Daftar: 85, 60, 90, 45, 75Mari kita bedah baris demi baris:
nilai.Count(n => n >= 70): menghitung elemen yang memenuhi predikat; tanpa predikat,Count()menghitung seluruh elemen.nilai.Sum(): menjumlahkan seluruh nilai; overload dengan selector sepertiSum(p => p.Harga)menjumlahkan satu property.nilai.Min()dannilai.Max(): mengembalikan nilai terkecil dan terbesar.nilai.Average(): menghitung rata-rata; untukint, hasilnya bertipedouble, sehingga 355 dibagi 5 menghasilkan71.nilai.Aggregate(...): pelipatan bebas dengan nilai awal""; setiap langkah menyambung satu angka baru beserta pemisah koma.
Pemakaian pada Koleksi Object #
Operator agregasi juga menerima selector, sehingga satu baris cukup untuk ringkasan daftar Produk: produk.Sum(p => p.Stok) menghasilkan total stok, dan produk.Average(p => p.Harga) menghasilkan harga rata-rata. Selector pada Min dan Max juga mengembalikan nilai property terkecil atau terbesar, bukan object yang memilikinya. Pada bab Grouping, kedua operator ini dipasangkan dengan GroupBy untuk merangkum per grup.
Perilaku pada Urutan Kosong #
Operator Min, Max, dan Average melempar InvalidOperationException bila sumber kosong, karena tidak ada nilai yang dapat dilaporkan. Operator Sum dan Count() berbeda: keduanya mengembalikan 0 atas urutan kosong tanpa exception. Perilaku bawaan ini perlu diperhitungkan saat sumber data bisa saja belum terisi. Untuk hasil yang berpotensi melebihi batas int, operator LongCount dan Sum pada long menyediakan penghitungan dengan rentang lebih luas.