删除值超过平均值的项目

时间:2014-09-12 15:12:18

标签: c# integer average

我有一个整数列表,即:

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

我想计算列表中整数的平均值,但不考虑任何异常值(如中间的那个)。我可以使用List对象中的任何方法吗?接近它的最佳方式是什么?

2 个答案:

答案 0 :(得分:2)

使用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
}

答案 1 :(得分:0)

您可以先计算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/