删除值超过平均值的项目
本文关键字:项目 平均值 删除 | 更新日期: 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/