删除值超过平均值的项目

本文关键字:项目 平均值 删除 | 更新日期: 2023-09-27 18:21:37

我有一个整数列表,即:

 List<int> test = new List<int>() {
     5, 5, 4, 0, 1, 23456732, 4, 3, 2, 4, 3
 };

我想计算列表中整数的平均值,但不考虑任何异常值(如中间的值)。在List对象中有什么方法可以用于它吗?最好的方法是什么?

删除值超过平均值的项目

使用LINQ:

var average = test.Average();

如果你想排除一些值,那么你需要过滤它们:

// average of numbers less than 100
var average = test.Where(i => i < 100).Average();

您可以定义自己的功能,检查给定的号码是否正常:

var average = test.Where(i => IsNormal(i)).Average();
// method
bool IsNormal(int number)
{
    // your logic here
    return true;// or false
}

您可以首先计算median,然后只使用与median仅相差给定因子的值进行计算(示例中为10):

public double GetResult(List<int> values)
{
    int median = Median(values);
    return values.Where(x => Math.Abs(x - median) < 10 * median).Average();
}
public static int Median(IEnumerable<int> list)
{
    List<int> orderedList = list
      .OrderBy(numbers => numbers)
      .ToList();
    int listSize = orderedList.Count;
    int result;
    if (listSize % 2 == 0) // even
    {
        int midIndex = listSize / 2;
        result = ((orderedList.ElementAt(midIndex - 1) +
               orderedList.ElementAt(midIndex)) / 2);
    }
    else // odd
    {
        double element = (double)listSize / 2;
        element = Math.Round(element, MidpointRounding.AwayFromZero);
        result = orderedList.ElementAt((int)(element - 1));
    }
    return result;
}

本页中值计算:http://www.remondo.net/calculate-mean-median-mode-averages-csharp/