我有一个整数列表,即删除项目:用价值超过平均
List<int> test = new List<int>() {
5, 5, 4, 0, 1, 23456732, 4, 3, 2, 4, 3
};
我想计算列表中的整数的平均水平,但没有考虑到任何异常值(如一个在中间)。我可以使用List对象中的任何方法吗?什么是最好的方法来处理它?
我有一个整数列表,即删除项目:用价值超过平均
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
}
或'test.Where(i => IsNormal(i))。Average();'让IsNormal给定义:) – 2014-09-12 15:18:37
@GrzegorzSławecki:lol – 2014-09-12 15:19:30
Good call @GrzegorzSławecki,将其添加到我的答案中,我们将剩下的给Bartosz。谢谢! – Zbigniew 2014-09-12 15:19:53
你可以先只计算median
然后我们对于(在本例中10)仅仅是一个给定的因素从median
远离计算Ë值:
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/
你怎么定义'abnormal'? – Zbigniew 2014-09-12 15:13:26
你可能想要的是平均值,而不是平均值。 – ths 2014-09-12 15:14:33
是什么让23456732“异常”? – batwad 2014-09-12 15:15:41