我有一个整数列表,即:
List<int> test = new List<int>() {
5, 5, 4, 0, 1, 23456732, 4, 3, 2, 4, 3
};
我想计算列表中整数的平均值,但不考虑任何异常值(如中间的那个)。我可以使用List对象中的任何方法吗?接近它的最佳方式是什么?
答案 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/