ภาพรวม
คำนวณค่าเฉลี่ย (Average) ของอาร์เรย์จำนวนเต็ม โดยหาผลรวมแล้วหารด้วยจำนวนสมาชิก
โค้ดตัวอย่าง
using System;
public class Program {
public static void Main() {
int[] myArr = { 45, 23, 55, 15, 8, 4, 2, 5, 9, 14 };
int len = myArr.Length;
int sum = 0;
for (int i = 0; i < len; i++) {
sum += myArr[i];
}
int average = sum / len; // Integer division
Console.WriteLine($"Sum = {sum}");
Console.WriteLine($"Average = {average}");
// แบบ Floating point
double avgDouble = (double)sum / len;
Console.WriteLine($"Average (precise) = {avgDouble:F2}");
}
}
ผลลัพธ์
Sum = 180
Average = 18
Average (precise) = 18.00
วิธีที่ทันสมัยกว่า: LINQ Average
using System.Linq;
int[] arr = { 45, 23, 55, 15, 8, 4, 2, 5, 9, 14 };
double average = arr.Average(); // คืนค่า double
Console.WriteLine($"Average: {average:F2}");
// สำหรับ int average (truncated)
int avgInt = (int)arr.Average();
// หรือ
int avgInt2 = arr.Sum() / arr.Length;
ข้อควรระวัง: Integer Division
int[] arr = { 1, 2 };
int avg1 = arr.Sum() / arr.Length; // 3/2 = 1 (truncated!)
double avg2 = arr.Average(); // 1.5 (ถูกต้อง)
Extension Method สำหรับ Integer Average แบบ Rounding
public static class ArrayExtensions {
public static int AverageInt(this int[] arr) {
if (arr.Length == 0) throw new InvalidOperationException("Empty array");
long sum = 0;
foreach (int x in arr) sum += x;
return (int)Math.Round((double)sum / arr.Length);
}
}
// ใช้งาน
int[] arr = { 1, 2 };
Console.WriteLine(arr.AverageInt()); // 2 (rounded)
สรุป
- ใช้
arr.Average()(LINQ) สำหรับค่าเฉลี่ยทศนิยม (double) - ใช้
arr.Sum() / arr.Lengthสำหรับ integer average (truncated) - ระวัง Integer Division - ควร cast เป็น double ก่อนหาร
- ใช้
longสำหรับ Sum ป้องกัน Overflow